From 12d655a7b75a3f7844e1787ee5b8be7cc2e14551 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Tue, 22 Feb 2022 14:25:01 +0200 Subject: [PATCH] Generic dossiers service --- apps/red-ui/src/app/app-routing.module.ts | 8 +- apps/red-ui/src/app/app.module.ts | 12 +- .../notifications/notifications.component.ts | 4 +- .../src/app/guards/archived-dossiers.guard.ts | 14 -- .../src/app/guards/dossier-files-guard.ts | 4 +- apps/red-ui/src/app/guards/dossiers.guard.ts | 14 +- .../src/app/guards/file-preview.guard.ts | 6 +- ...add-edit-dossier-state-dialog.component.ts | 2 +- ...dd-edit-file-attribute-dialog.component.ts | 2 +- .../confirm-delete-users-dialog.component.ts | 9 +- ...dossier-states-listing-screen.component.ts | 10 +- .../screens/trash/trash-screen.component.ts | 10 +- .../add-dossier-dialog.component.ts | 6 +- ...sign-reviewer-approver-dialog.component.ts | 6 +- .../change-legal-basis-dialog.component.ts | 4 +- ...onfirm-archive-dossier-dialog.component.ts | 4 +- .../document-info-dialog.component.ts | 6 +- .../edit-dossier-dictionary.component.ts | 4 +- ...edit-dossier-download-package.component.ts | 6 +- .../edit-dossier-dialog.component.ts | 18 +-- .../edit-dossier-team.component.ts | 6 +- .../edit-dossier-general-info.component.ts | 8 +- .../force-annotation-dialog.component.ts | 4 +- .../manual-annotation-dialog.component.ts | 6 +- .../dossier-details.component.ts | 8 +- .../file-workload/file-workload.component.ts | 9 +- .../dossier-overview-screen.component.ts | 16 +- .../services/bulk-actions.service.ts | 6 +- .../dossier-documents-status.component.ts | 2 +- .../dossiers-listing-actions.component.ts | 12 +- .../dossiers-listing-details.component.html | 2 +- .../dossiers-listing-details.component.ts | 12 +- .../dossiers-listing-screen.component.ts | 8 +- .../annotation-actions.component.ts | 10 +- .../document-info/document-info.component.ts | 2 +- .../user-management.component.ts | 6 +- .../accept-recommendation-dialog.component.ts | 6 +- .../file-preview-providers.ts | 2 +- .../file-preview-screen.component.ts | 12 +- .../services/annotation-actions.service.ts | 6 +- .../services/annotation-draw.service.ts | 8 +- .../services/file-preview-state.service.ts | 10 +- .../search-screen/search-screen.component.ts | 8 +- .../services/manual-annotation.service.ts | 6 +- .../file-actions/file-actions.component.ts | 18 +-- .../shared/services/file-assign.service.ts | 6 +- .../dictionary-manager.component.html | 2 +- .../dictionary-manager.component.ts | 4 +- ...dossiers-listing-dossier-name.component.ts | 7 +- .../file-drop/file-drop.component.ts | 6 +- .../src/app/services/breadcrumbs.service.ts | 6 +- .../active-dossiers.service.ts | 133 ++++++++++++++++ .../archived-dossiers.service.ts | 36 ++--- .../entity-services/dossiers.service.ts | 148 ++---------------- .../platform-search.service.ts | 8 +- .../src/app/services/notifications.service.ts | 6 +- .../src/app/services/permissions.service.ts | 6 +- apps/red-ui/src/app/tokens.ts | 3 + 58 files changed, 361 insertions(+), 352 deletions(-) delete mode 100644 apps/red-ui/src/app/guards/archived-dossiers.guard.ts create mode 100644 apps/red-ui/src/app/services/entity-services/active-dossiers.service.ts diff --git a/apps/red-ui/src/app/app-routing.module.ts b/apps/red-ui/src/app/app-routing.module.ts index 19618afeb..667b37f53 100644 --- a/apps/red-ui/src/app/app-routing.module.ts +++ b/apps/red-ui/src/app/app-routing.module.ts @@ -6,9 +6,9 @@ import { BaseScreenComponent } from '@components/base-screen/base-screen.compone import { RouteReuseStrategy, RouterModule, Routes } from '@angular/router'; import { NgModule } from '@angular/core'; import { DownloadsListScreenComponent } from '@components/downloads-list-screen/downloads-list-screen.component'; -import { DossiersGuard } from '@guards/dossiers.guard'; import { DossierTemplatesGuard } from '@guards/dossier-templates.guard'; -import { ArchivedDossiersGuard } from '@guards/archived-dossiers.guard'; +import { DossiersGuard } from '@guards/dossiers.guard'; +import { ACTIVE_DOSSIERS_SERVICE, ARCHIVED_DOSSIERS_SERVICE } from './tokens'; const routes: Routes = [ { @@ -39,6 +39,7 @@ const routes: Routes = [ data: { routeGuards: [AuthGuard, RedRoleGuard, DossierTemplatesGuard, DossiersGuard], requiredRoles: ['RED_USER', 'RED_MANAGER'], + dossiersService: ACTIVE_DOSSIERS_SERVICE, }, }, { @@ -47,8 +48,9 @@ const routes: Routes = [ loadChildren: () => import('./modules/archive/archive.module').then(m => m.ArchiveModule), canActivate: [CompositeRouteGuard], data: { - routeGuards: [AuthGuard, RedRoleGuard, DossierTemplatesGuard, ArchivedDossiersGuard], + routeGuards: [AuthGuard, RedRoleGuard, DossierTemplatesGuard, DossiersGuard], requiredRoles: ['RED_USER', 'RED_MANAGER'], + dossiersService: ARCHIVED_DOSSIERS_SERVICE, }, }, { diff --git a/apps/red-ui/src/app/app.module.ts b/apps/red-ui/src/app/app.module.ts index 460e10808..aab790e5a 100644 --- a/apps/red-ui/src/app/app.module.ts +++ b/apps/red-ui/src/app/app.module.ts @@ -20,7 +20,7 @@ import { AppRoutingModule } from './app-routing.module'; import { SharedModule } from '@shared/shared.module'; import { FileUploadDownloadModule } from '@upload-download/file-upload-download.module'; import { PlatformLocation } from '@angular/common'; -import { BASE_HREF } from './tokens'; +import { ACTIVE_DOSSIERS_SERVICE, ARCHIVED_DOSSIERS_SERVICE, BASE_HREF } from './tokens'; import { MonacoEditorModule } from '@materia-ui/ngx-monaco-editor'; import { GlobalErrorHandler } from '@utils/global-error-handler.service'; import { REDMissingTranslationHandler } from '@utils/missing-translations-handler'; @@ -44,6 +44,8 @@ import { GeneralSettingsService } from '@services/general-settings.service'; import { BreadcrumbsComponent } from '@components/breadcrumbs/breadcrumbs.component'; import { UserPreferenceService } from '@services/user-preference.service'; import { UserService } from '@services/user.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; +import { ArchivedDossiersService } from '@services/entity-services/archived-dossiers.service'; export function httpLoaderFactory(httpClient: HttpClient, configService: ConfigService): PruningTranslationLoader { return new PruningTranslationLoader(httpClient, '/assets/i18n/', `.json?version=${configService.values.FRONTEND_APP_VERSION}`); @@ -144,6 +146,14 @@ const components = [AppComponent, AuthErrorComponent, NotificationsComponent, Sp useFactory: (configService: ConfigService) => configService.values.MAX_RETRIES_ON_SERVER_ERROR, deps: [ConfigService], }, + { + provide: ACTIVE_DOSSIERS_SERVICE, + useExisting: ActiveDossiersService, + }, + { + provide: ARCHIVED_DOSSIERS_SERVICE, + useExisting: ArchivedDossiersService, + }, DatePipe, ], bootstrap: [AppComponent], diff --git a/apps/red-ui/src/app/components/notifications/notifications.component.ts b/apps/red-ui/src/app/components/notifications/notifications.component.ts index 29b22b627..ac364c677 100644 --- a/apps/red-ui/src/app/components/notifications/notifications.component.ts +++ b/apps/red-ui/src/app/components/notifications/notifications.component.ts @@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; import { DatePipe } from '@shared/pipes/date.pipe'; import { UserService } from '@services/user.service'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { NotificationsService } from '@services/notifications.service'; import { Notification } from '@red/domain'; import { distinctUntilChanged, map, switchMap, tap } from 'rxjs/operators'; @@ -33,7 +33,7 @@ export class NotificationsComponent extends AutoUnsubscribe implements OnInit { private readonly _translateService: TranslateService, private readonly _userService: UserService, private readonly _notificationsService: NotificationsService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _datePipe: DatePipe, ) { super(); diff --git a/apps/red-ui/src/app/guards/archived-dossiers.guard.ts b/apps/red-ui/src/app/guards/archived-dossiers.guard.ts deleted file mode 100644 index dd2577221..000000000 --- a/apps/red-ui/src/app/guards/archived-dossiers.guard.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Injectable } from '@angular/core'; -import { CanActivate } from '@angular/router'; -import { firstValueFrom } from 'rxjs'; -import { ArchivedDossiersService } from '@services/entity-services/archived-dossiers.service'; - -@Injectable({ providedIn: 'root' }) -export class ArchivedDossiersGuard implements CanActivate { - constructor(private readonly _archivedDossiersService: ArchivedDossiersService) {} - - async canActivate(): Promise { - await firstValueFrom(this._archivedDossiersService.loadAll()); - return true; - } -} diff --git a/apps/red-ui/src/app/guards/dossier-files-guard.ts b/apps/red-ui/src/app/guards/dossier-files-guard.ts index 2b5a353b4..d8ecf32fc 100644 --- a/apps/red-ui/src/app/guards/dossier-files-guard.ts +++ b/apps/red-ui/src/app/guards/dossier-files-guard.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { ActivatedRouteSnapshot, CanActivate, Router } from '@angular/router'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { FilesMapService } from '@services/entity-services/files-map.service'; import { FilesService } from '@services/entity-services/files.service'; import { firstValueFrom } from 'rxjs'; @@ -9,7 +9,7 @@ import { DOSSIER_ID } from '@utils/constants'; @Injectable({ providedIn: 'root' }) export class DossierFilesGuard implements CanActivate { constructor( - private readonly _dossiersService: DossiersService, + private readonly _dossiersService: ActiveDossiersService, private readonly _filesMapService: FilesMapService, private readonly _filesService: FilesService, private readonly _router: Router, diff --git a/apps/red-ui/src/app/guards/dossiers.guard.ts b/apps/red-ui/src/app/guards/dossiers.guard.ts index 7f056bf71..e870a7b04 100644 --- a/apps/red-ui/src/app/guards/dossiers.guard.ts +++ b/apps/red-ui/src/app/guards/dossiers.guard.ts @@ -1,14 +1,16 @@ -import { Injectable } from '@angular/core'; -import { CanActivate } from '@angular/router'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { Injectable, Injector, ProviderToken } from '@angular/core'; +import { ActivatedRouteSnapshot, CanActivate } from '@angular/router'; import { firstValueFrom } from 'rxjs'; +import { DossiersService } from '@services/entity-services/dossiers.service'; @Injectable({ providedIn: 'root' }) export class DossiersGuard implements CanActivate { - constructor(private readonly _dossiersService: DossiersService) {} + constructor(private readonly _injector: Injector) {} - async canActivate(): Promise { - await firstValueFrom(this._dossiersService.loadAll()); + async canActivate(route: ActivatedRouteSnapshot): Promise { + const token: ProviderToken = route.data.dossiersService; + const dossiersService: DossiersService = this._injector.get(token); + await firstValueFrom(dossiersService.loadAll()); return true; } } diff --git a/apps/red-ui/src/app/guards/file-preview.guard.ts b/apps/red-ui/src/app/guards/file-preview.guard.ts index 6db6c56d3..43feda4ae 100644 --- a/apps/red-ui/src/app/guards/file-preview.guard.ts +++ b/apps/red-ui/src/app/guards/file-preview.guard.ts @@ -1,14 +1,14 @@ import { Injectable } from '@angular/core'; import { ActivatedRouteSnapshot, CanActivate, Router } from '@angular/router'; import { FilesMapService } from '@services/entity-services/files-map.service'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { DOSSIER_ID, FILE_ID } from '@utils/constants'; @Injectable({ providedIn: 'root' }) export class FilePreviewGuard implements CanActivate { constructor( private readonly _filesMapService: FilesMapService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _router: Router, ) {} @@ -16,7 +16,7 @@ export class FilePreviewGuard implements CanActivate { const dossierId = route.paramMap.get(DOSSIER_ID); const fileId = route.paramMap.get(FILE_ID); - const dossier = this._dossiersService.find(dossierId); + const dossier = this._activeDossiersService.find(dossierId); if (!this._filesMapService.get(dossierId, fileId)) { await this._router.navigate([dossier.routerLink]); diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-state-dialog/add-edit-dossier-state-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-state-dialog/add-edit-dossier-state-dialog.component.ts index 0a3ec2ad4..7a5828ea7 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-state-dialog/add-edit-dossier-state-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-state-dialog/add-edit-dossier-state-dialog.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, Component, Inject, Injector } from '@angular/core'; -import { BaseDialogComponent } from '../../../../../../../../libs/common-ui/src'; +import { BaseDialogComponent } from '@iqser/common-ui'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { IDossierState } from '@red/domain'; diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.ts index 413cdc418..c1870a01a 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.ts @@ -4,7 +4,7 @@ import { FileAttributeConfigTypes, IFileAttributeConfig } from '@red/domain'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { fileAttributeTypesTranslations } from '../../translations/file-attribute-types-translations'; import { FileAttributesService } from '@services/entity-services/file-attributes.service'; -import { BaseDialogComponent } from '../../../../../../../../libs/common-ui/src'; +import { BaseDialogComponent } from '@iqser/common-ui'; @Component({ selector: 'redaction-add-edit-file-attribute-dialog', diff --git a/apps/red-ui/src/app/modules/admin/dialogs/confirm-delete-users-dialog/confirm-delete-users-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/confirm-delete-users-dialog/confirm-delete-users-dialog.component.ts index 62cf4cb8b..952f31f18 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/confirm-delete-users-dialog/confirm-delete-users-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/confirm-delete-users-dialog/confirm-delete-users-dialog.component.ts @@ -2,7 +2,7 @@ import { Component, Inject } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { List, LoadingService } from '@iqser/common-ui'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { UserService } from '@services/user.service'; import { firstValueFrom } from 'rxjs'; @@ -22,7 +22,7 @@ export class ConfirmDeleteUsersDialogComponent { constructor( private readonly _userService: UserService, private readonly _loadingService: LoadingService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, @Inject(MAT_DIALOG_DATA) readonly userIds: List, readonly dialogRef: MatDialogRef, ) { @@ -34,8 +34,9 @@ export class ConfirmDeleteUsersDialogComponent { } private get _dossierCount(): number { - return this._dossiersService.all.filter(dw => this.userIds.reduce((prev, userId) => prev || dw.memberIds.includes(userId), false)) - .length; + return this._activeDossiersService.all.filter(dw => + this.userIds.reduce((prev, userId) => prev || dw.memberIds.includes(userId), false), + ).length; } async deleteUser() { diff --git a/apps/red-ui/src/app/modules/admin/screens/dossier-states-listing/dossier-states-listing-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/dossier-states-listing/dossier-states-listing-screen.component.ts index 483430a56..d21f9a8a8 100644 --- a/apps/red-ui/src/app/modules/admin/screens/dossier-states-listing/dossier-states-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/dossier-states-listing/dossier-states-listing-screen.component.ts @@ -7,10 +7,10 @@ import { LoadingService, TableColumnConfig, Toaster, -} from '../../../../../../../../libs/common-ui/src'; +} from '@iqser/common-ui'; import { DossierState, IDossierState } from '@red/domain'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { DossierStateService } from '@services/entity-services/dossier-state.service'; import { firstValueFrom } from 'rxjs'; import { AdminDialogService } from '../../services/admin-dialog.service'; @@ -44,7 +44,7 @@ export class DossierStatesListingScreenComponent extends ListingComponent { this._loadingService.start(); - await firstValueFrom(this._dossiersService.loadAll()); + await firstValueFrom(this._activeDossiersService.loadAll()); try { const dossierStates = this.dossierStateService.all.filter(d => d.dossierTemplateId === this.#dossierTemplateId); @@ -121,6 +121,6 @@ export class DossierStatesListingScreenComponent extends ListingComponent (state.dossierCount = this._dossiersService.getCountWithState(state.dossierStatusId))); + dossierStates.forEach(state => (state.dossierCount = this._activeDossiersService.getCountWithState(state.dossierStatusId))); } } diff --git a/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.ts index b279502e5..ddb82b7d0 100644 --- a/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.ts @@ -12,7 +12,7 @@ import { } from '@iqser/common-ui'; import { ConfigService } from '@services/config.service'; import * as moment from 'moment'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { AdminDialogService } from '../../services/admin-dialog.service'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { Observable } from 'rxjs'; @@ -50,7 +50,7 @@ export class TrashScreenComponent extends ListingComponent impl protected readonly _injector: Injector, private readonly _loadingService: LoadingService, private readonly _permissionsService: PermissionsService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, readonly routerHistoryService: RouterHistoryService, private readonly _configService: ConfigService, private readonly _adminDialogService: AdminDialogService, @@ -108,7 +108,7 @@ export class TrashScreenComponent extends ListingComponent impl } private async _loadDossiersData(): Promise { - this.entitiesService.setEntities(this._toListItems(await this._dossiersService.getDeleted()).filter(d => d.canRestore)); + this.entitiesService.setEntities(this._toListItems(await this._activeDossiersService.getDeleted()).filter(d => d.canRestore)); } private _canRestoreDossier(restoreDate: string): boolean { @@ -137,13 +137,13 @@ export class TrashScreenComponent extends ListingComponent impl private async _restore(dossiers: DossierListItem[]): Promise { const dossierIds = dossiers.map(d => d.id); - await this._dossiersService.restore(dossierIds); + await this._activeDossiersService.restore(dossierIds); this._removeFromList(dossierIds); } private async _hardDelete(dossiers: DossierListItem[]) { const dossierIds = dossiers.map(d => d.id); - await this._dossiersService.hardDelete(dossierIds); + await this._activeDossiersService.hardDelete(dossierIds); this._removeFromList(dossierIds); } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts index 7b28b0b7a..5f8df2701 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts @@ -5,7 +5,7 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import * as moment from 'moment'; import { downloadTypesTranslations } from '../../../../translations/download-types-translations'; import { BaseDialogComponent, IconButtonTypes, SaveOptions } from '@iqser/common-ui'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; import { ReportTemplateService } from '@services/report-template.service'; import { firstValueFrom } from 'rxjs'; @@ -29,7 +29,7 @@ export class AddDossierDialogComponent extends BaseDialogComponent { availableReportTypes = []; constructor( - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _dossierTemplatesService: DossierTemplatesService, private readonly _formBuilder: FormBuilder, private readonly _reportTemplateController: ReportTemplateService, @@ -61,7 +61,7 @@ export class AddDossierDialogComponent extends BaseDialogComponent { reportTemplateValueMapper = (reportTemplate: IReportTemplate) => reportTemplate.templateId; async save(options?: SaveOptions) { - const savedDossier = await firstValueFrom(this._dossiersService.createOrUpdate(this._formToObject())); + const savedDossier = await firstValueFrom(this._activeDossiersService.createOrUpdate(this._formToObject())); if (savedDossier) { this._dialogRef.close({ dossier: savedDossier, addMembers: options?.addMembers }); } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts index 8c41436ea..7c7cab056 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts @@ -6,7 +6,7 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { Dossier, File } from '@red/domain'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { FilesService } from '@services/entity-services/files.service'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { PermissionsService } from '@services/permissions.service'; import { firstValueFrom } from 'rxjs'; @@ -30,14 +30,14 @@ export class AssignReviewerApproverDialogComponent { readonly userService: UserService, private readonly _toaster: Toaster, private readonly _formBuilder: FormBuilder, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _filesService: FilesService, private readonly _loadingService: LoadingService, readonly permissionsService: PermissionsService, private readonly _dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) readonly data: DialogData, ) { - this.dossier = this._dossiersService.find(this.data.files[0].dossierId); + this.dossier = this._activeDossiersService.find(this.data.files[0].dossierId); this.form = this._getForm(); } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/change-legal-basis-dialog/change-legal-basis-dialog.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/change-legal-basis-dialog/change-legal-basis-dialog.component.ts index 350bba3e4..379c21e15 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/change-legal-basis-dialog/change-legal-basis-dialog.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/change-legal-basis-dialog/change-legal-basis-dialog.component.ts @@ -3,7 +3,7 @@ import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { AnnotationWrapper } from '@models/file/annotation.wrapper'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { PermissionsService } from '@services/permissions.service'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { JustificationsService } from '@services/entity-services/justifications.service'; import { Dossier } from '@red/domain'; import { BaseDialogComponent } from '@iqser/common-ui'; @@ -24,7 +24,7 @@ export class ChangeLegalBasisDialogComponent extends BaseDialogComponent impleme constructor( private readonly _justificationsService: JustificationsService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _permissionsService: PermissionsService, private readonly _formBuilder: FormBuilder, protected readonly _injector: Injector, diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/confirm-archive-dossier-dialog/confirm-archive-dossier-dialog.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/confirm-archive-dossier-dialog/confirm-archive-dossier-dialog.component.ts index 662e261b1..161eabde6 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/confirm-archive-dossier-dialog/confirm-archive-dossier-dialog.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/confirm-archive-dossier-dialog/confirm-archive-dossier-dialog.component.ts @@ -4,7 +4,7 @@ import { LoadingService, Toaster } from '@iqser/common-ui'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { firstValueFrom } from 'rxjs'; import { Dossier } from '@red/domain'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { ArchivedDossiersService } from '@services/entity-services/archived-dossiers.service'; @Component({ @@ -17,7 +17,7 @@ export class ConfirmArchiveDossierDialogComponent { constructor( private readonly _loadingService: LoadingService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _archivedDossiersService: ArchivedDossiersService, private readonly _toaster: Toaster, @Inject(MAT_DIALOG_DATA) readonly dossier: Dossier, diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/document-info-dialog/document-info-dialog.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/document-info-dialog/document-info-dialog.component.ts index b3914d265..6c035d370 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/document-info-dialog/document-info-dialog.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/document-info-dialog/document-info-dialog.component.ts @@ -3,7 +3,7 @@ import { FormBuilder, FormGroup } 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 { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { FilesService } from '@services/entity-services/files.service'; import { BaseDialogComponent } from '@iqser/common-ui'; import { firstValueFrom } from 'rxjs'; @@ -19,7 +19,7 @@ export class DocumentInfoDialogComponent extends BaseDialogComponent implements private readonly _dossier: Dossier; constructor( - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _formBuilder: FormBuilder, private readonly _fileAttributesService: FileAttributesService, private readonly _filesService: FilesService, @@ -28,7 +28,7 @@ export class DocumentInfoDialogComponent extends BaseDialogComponent implements @Inject(MAT_DIALOG_DATA) readonly data: File, ) { super(_injector, _dialogRef); - this._dossier = this._dossiersService.find(this.data.dossierId); + this._dossier = this._activeDossiersService.find(this.data.dossierId); } async ngOnInit() { diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts index 5decb01fc..68a0f725f 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts @@ -5,7 +5,7 @@ import { PermissionsService } from '@services/permissions.service'; import { DictionaryManagerComponent } from '@shared/components/dictionary-manager/dictionary-manager.component'; import { DictionaryService } from '@shared/services/dictionary.service'; import { CircleButtonTypes, LoadingService, Toaster } from '@iqser/common-ui'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { FormBuilder, FormGroup } from '@angular/forms'; import { firstValueFrom } from 'rxjs'; @@ -27,7 +27,7 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa @ViewChild(DictionaryManagerComponent, { static: false }) private readonly _dictionaryManager: DictionaryManagerComponent; constructor( - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _dictionaryService: DictionaryService, private readonly _permissionsService: PermissionsService, private readonly _loadingService: LoadingService, diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts index af3b3f7fd..cdbae3661 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts @@ -3,7 +3,7 @@ import { Dossier, DownloadFileType, IReportTemplate } from '@red/domain'; import { FormBuilder, FormGroup } from '@angular/forms'; import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-dossier-section.interface'; import { downloadTypesTranslations } from '../../../../../translations/download-types-translations'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { ReportTemplateService } from '@services/report-template.service'; import { PermissionsService } from '@services/permissions.service'; import { firstValueFrom } from 'rxjs'; @@ -26,7 +26,7 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS @Input() dossier: Dossier; constructor( - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _reportTemplateController: ReportTemplateService, private readonly _formBuilder: FormBuilder, private readonly _permissionsService: PermissionsService, @@ -88,7 +88,7 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS reportTemplateIds: this.form.get('reportTemplateIds').value, }; - const updatedDossier = await firstValueFrom(this._dossiersService.createOrUpdate(dossier)); + const updatedDossier = await firstValueFrom(this._activeDossiersService.createOrUpdate(dossier)); return { success: !!updatedDossier }; } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts index 1b2cfceed..be9d8491e 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts @@ -10,7 +10,7 @@ import { EditDossierAttributesComponent } from './attributes/edit-dossier-attrib import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { EditDossierDeletedDocumentsComponent } from './deleted-documents/edit-dossier-deleted-documents.component'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; import { EditDossierTeamComponent } from './edit-dossier-team/edit-dossier-team.component'; @@ -40,7 +40,7 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A constructor( private readonly _toaster: Toaster, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _changeRef: ChangeDetectorRef, private readonly _loadingService: LoadingService, private readonly _permissionsService: PermissionsService, @@ -85,16 +85,10 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A }, ]; - this.dossier$ = this._dossiersService.getEntityChanged$(_data.dossierId).pipe(tap(dossier => (this._dossier = dossier))); + this.dossier$ = this._activeDossiersService.getEntityChanged$(_data.dossierId).pipe(tap(dossier => (this._dossier = dossier))); this.activeNav = _data.section || 'dossierInfo'; } - ngAfterViewInit() { - if (!this._dossier.ownerId) { - this._toaster.error(_('edit-dossier-dialog.missing-owner')); - } - } - get activeNavItem(): { key: string; title?: string } { return this.navItems.find(item => item.key === this.activeNav); } @@ -137,6 +131,12 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A return this.activeComponent?.disabled; } + ngAfterViewInit() { + if (!this._dossier.ownerId) { + this._toaster.error(_('edit-dossier-dialog.missing-owner')); + } + } + async save(options?: SaveOptions) { this._loadingService.start(); const result = await this.activeComponent.save(); diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts index aac9f4a28..c1943c05f 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit } from '@angular/core'; import { UserService } from '@services/user.service'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { Dossier, IDossierRequest } from '@red/domain'; import { AutoUnsubscribe } from '@iqser/common-ui'; import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-dossier-section.interface'; @@ -28,7 +28,7 @@ export class EditDossierTeamComponent extends AutoUnsubscribe implements EditDos constructor( readonly userService: UserService, private readonly _formBuilder: FormBuilder, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _permissionsService: PermissionsService, ) { super(); @@ -91,7 +91,7 @@ export class EditDossierTeamComponent extends AutoUnsubscribe implements EditDos ownerId: this.selectedOwnerId, } as IDossierRequest; - const updatedDossier = await firstValueFrom(this._dossiersService.createOrUpdate(dossier)); + const updatedDossier = await firstValueFrom(this._activeDossiersService.createOrUpdate(dossier)); return { success: !!updatedDossier }; } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts index 89395d8e2..9b3f48eee 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts @@ -10,7 +10,7 @@ import { MatDialogRef } from '@angular/material/dialog'; import { EditDossierDialogComponent } from '../edit-dossier-dialog.component'; import { ConfirmationDialogInput, IconButtonTypes, TitleColors, Toaster } from '@iqser/common-ui'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; import { DossierStatsService } from '@services/entity-services/dossier-stats.service'; import { firstValueFrom } from 'rxjs'; @@ -38,7 +38,7 @@ export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSecti readonly permissionsService: PermissionsService, private readonly _dossierStateService: DossierStateService, private readonly _dossierTemplatesService: DossierTemplatesService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _dossierStatsService: DossierStatsService, private readonly _formBuilder: FormBuilder, private readonly _dialogService: DossiersDialogService, @@ -120,7 +120,7 @@ export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSecti dossierStatusId: this.form.get('dossierStatusId').value, } as IDossierRequest; - const updatedDossier = await firstValueFrom(this._dossiersService.createOrUpdate(dossier)); + const updatedDossier = await firstValueFrom(this._activeDossiersService.createOrUpdate(dossier)); return { success: !!updatedDossier }; } @@ -139,7 +139,7 @@ export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSecti }, }); this._dialogService.openDialog('confirm', null, data, async () => { - await firstValueFrom(this._dossiersService.delete(this.dossier)); + await firstValueFrom(this._activeDossiersService.delete(this.dossier)); this._editDossierDialogRef.close(); this._router.navigate(['main', 'dossiers']).then(() => this.#notifyDossierDeleted()); }); diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/force-redaction-dialog/force-annotation-dialog.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/force-redaction-dialog/force-annotation-dialog.component.ts index 5fc82072b..ee322806b 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/force-redaction-dialog/force-annotation-dialog.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/force-redaction-dialog/force-annotation-dialog.component.ts @@ -6,7 +6,7 @@ import { TranslateService } from '@ngx-translate/core'; import { UserService } from '@services/user.service'; import { ManualAnnotationService } from '../../services/manual-annotation.service'; import { PermissionsService } from '@services/permissions.service'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { JustificationsService } from '@services/entity-services/justifications.service'; import { Dossier, ILegalBasisChangeRequest } from '@red/domain'; import { firstValueFrom } from 'rxjs'; @@ -28,7 +28,7 @@ export class ForceAnnotationDialogComponent extends BaseDialogComponent implemen legalOptions: LegalBasisOption[] = []; constructor( - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _userService: UserService, private readonly _formBuilder: FormBuilder, private readonly _notificationService: Toaster, diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/manual-redaction-dialog/manual-annotation-dialog.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/manual-redaction-dialog/manual-annotation-dialog.component.ts index 007009825..cc6f72750 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/manual-redaction-dialog/manual-annotation-dialog.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/manual-redaction-dialog/manual-annotation-dialog.component.ts @@ -6,7 +6,7 @@ import { ManualAnnotationService } from '../../services/manual-annotation.servic import { PermissionsService } from '@services/permissions.service'; import { JustificationsService } from '@services/entity-services/justifications.service'; import { Dictionary, Dossier, IAddRedactionRequest } from '@red/domain'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { DictionaryService } from '@shared/services/dictionary.service'; import { BaseDialogComponent } from '@iqser/common-ui'; import { firstValueFrom } from 'rxjs'; @@ -36,14 +36,14 @@ export class ManualAnnotationDialogComponent extends BaseDialogComponent impleme private readonly _justificationsService: JustificationsService, private readonly _manualAnnotationService: ManualAnnotationService, private readonly _permissionsService: PermissionsService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _dictionaryService: DictionaryService, protected readonly _injector: Injector, protected readonly _dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: { manualRedactionEntryWrapper: ManualRedactionEntryWrapper; dossierId: string }, ) { super(_injector, _dialogRef); - this._dossier = this._dossiersService.find(this.data.dossierId); + this._dossier = this._activeDossiersService.find(this.data.dossierId); this.isDocumentAdmin = this._permissionsService.isApprover(this._dossier); this.isFalsePositiveRequest = this.data.manualRedactionEntryWrapper.type === 'FALSE_POSITIVE'; diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/dossier-details/dossier-details.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/dossier-details/dossier-details.component.ts index c192c12e5..b6ede1e8d 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/dossier-details/dossier-details.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/dossier-details/dossier-details.component.ts @@ -6,7 +6,7 @@ import { FilterService, ProgressBarConfigModel, shareLast, Toaster } from '@iqse import { workflowFileStatusTranslations } from '../../../../translations/file-status-translations'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { Dossier, DossierAttributeWithValue, DossierStats, IDossierRequest, StatusSorter, User } from '@red/domain'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { ActivatedRoute } from '@angular/router'; import { firstValueFrom, Observable } from 'rxjs'; import { DossierStatsService } from '@services/entity-services/dossier-stats.service'; @@ -37,7 +37,7 @@ export class DossierDetailsComponent { statusConfig$: Observable; constructor( - readonly dossiersService: DossiersService, + readonly activeDossiersService: ActiveDossiersService, readonly translateChartService: TranslateChartService, readonly filterService: FilterService, private readonly _changeDetectorRef: ChangeDetectorRef, @@ -49,7 +49,7 @@ export class DossierDetailsComponent { activatedRoute: ActivatedRoute, ) { this.dossierId = activatedRoute.snapshot.paramMap.get(DOSSIER_ID); - this.dossier$ = this.dossiersService.getEntityChanged$(this.dossierId).pipe(shareLast()); + this.dossier$ = this.activeDossiersService.getEntityChanged$(this.dossierId).pipe(shareLast()); this.dossierStats$ = this.dossier$.pipe( pluck('dossierId'), switchMap(dossierId => this._dossierStatsService.watch$(dossierId)), @@ -65,7 +65,7 @@ export class DossierDetailsComponent { async assignOwner(user: User | string, dossier: Dossier) { const owner = typeof user === 'string' ? this._userService.find(user) : user; const dossierRequest: IDossierRequest = { ...dossier, ownerId: owner.id }; - await firstValueFrom(this.dossiersService.createOrUpdate(dossierRequest)); + await firstValueFrom(this.activeDossiersService.createOrUpdate(dossierRequest)); const ownerName = this._userService.getNameForId(owner.id); const dossierName = dossier.dossierName; diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/table-item/file-workload/file-workload.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/table-item/file-workload/file-workload.component.ts index 5233d96ad..021efffce 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/table-item/file-workload/file-workload.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/table-item/file-workload/file-workload.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; import { File } from '@red/domain'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { UserService } from '@services/user.service'; import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service'; @@ -16,7 +16,7 @@ export class FileWorkloadComponent { constructor( readonly userService: UserService, private readonly _dictionariesMapService: DictionariesMapService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, ) {} get suggestionColor() { @@ -44,6 +44,9 @@ export class FileWorkloadComponent { } private _getDictionaryColor(type: string) { - return this._dictionariesMapService.getDictionaryColor(type, this._dossiersService.find(this.file.dossierId).dossierTemplateId); + return this._dictionariesMapService.getDictionaryColor( + type, + this._activeDossiersService.find(this.file.dossierId).dossierTemplateId, + ); } } diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/screen/dossier-overview-screen.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/screen/dossier-overview-screen.component.ts index 00cb0711f..c62cee103 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/screen/dossier-overview-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/screen/dossier-overview-screen.component.ts @@ -38,7 +38,7 @@ import { PermissionsService } from '@services/permissions.service'; import { ActivatedRoute, Router } from '@angular/router'; import { FileAttributesService } from '@services/entity-services/file-attributes.service'; import { ConfigService } from '../config.service'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; import { LongPressEvent } from '@shared/directives/long-press.directive'; import { UserPreferenceService } from '@services/user-preference.service'; @@ -78,7 +78,7 @@ export class DossierOverviewScreenComponent extends ListingComponent imple protected readonly _injector: Injector, private readonly _router: Router, private readonly _loadingService: LoadingService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _dossierTemplatesService: DossierTemplatesService, private readonly _fileUploadService: FileUploadService, private readonly _filesService: FilesService, @@ -95,10 +95,10 @@ export class DossierOverviewScreenComponent extends ListingComponent imple ) { super(_injector); this.dossierId = activatedRoute.snapshot.paramMap.get(DOSSIER_ID); - this.dossier$ = this._dossiersService + this.dossier$ = this._activeDossiersService .getEntityChanged$(this.dossierId) .pipe(tap(dossier => (this.dossierTemplateId = dossier.dossierTemplateId))); - this.currentDossier = this._dossiersService.find(this.dossierId); + this.currentDossier = this._activeDossiersService.find(this.dossierId); this._updateFileAttributes(); } @@ -133,7 +133,7 @@ export class DossierOverviewScreenComponent extends ListingComponent imple this._computeAllFilters(); }); - this.addSubscription = this._dossiersService.dossierFileChanges$ + this.addSubscription = this._activeDossiersService.dossierFileChanges$ .pipe( filter(dossierId => dossierId === this.dossierId), switchMap(dossierId => this._filesService.loadAll(dossierId)), @@ -176,7 +176,7 @@ export class DossierOverviewScreenComponent extends ListingComponent imple @HostListener('drop', ['$event']) onDrop(event: DragEvent): void { - const currentDossier = this._dossiersService.find(this.dossierId); + const currentDossier = this._activeDossiersService.find(this.dossierId); handleFileDrop(event, currentDossier, this._uploadFiles.bind(this)); } @@ -192,7 +192,7 @@ export class DossierOverviewScreenComponent extends ListingComponent imple } private _setRemovableSubscriptions(): void { - this.addActiveScreenSubscription = this._dossiersService + this.addActiveScreenSubscription = this._activeDossiersService .getEntityDeleted$(this.dossierId) .pipe(tap(() => this._handleDeletedDossier())) .subscribe(); @@ -214,7 +214,7 @@ export class DossierOverviewScreenComponent extends ListingComponent imple } private _loadEntitiesFromState() { - this.currentDossier = this._dossiersService.find(this.dossierId); + this.currentDossier = this._activeDossiersService.find(this.dossierId); this._computeAllFilters(); } diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/services/bulk-actions.service.ts b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/services/bulk-actions.service.ts index d7bbdd4a5..dfdc3e696 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/services/bulk-actions.service.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/services/bulk-actions.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@angular/core'; import { Dossier, File } from '@red/domain'; import { DossiersDialogService } from '../../../services/dossiers-dialog.service'; import { ConfirmationDialogInput, LoadingService } from '@iqser/common-ui'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { FilesService } from '@services/entity-services/files.service'; import { FileAssignService } from '../../../shared/services/file-assign.service'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; @@ -15,7 +15,7 @@ export class BulkActionsService { constructor( private readonly _dialogService: DossiersDialogService, private readonly _loadingService: LoadingService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _filesService: FilesService, private readonly _fileAssignService: FileAssignService, private readonly _reanalysisService: ReanalysisService, @@ -152,7 +152,7 @@ export class BulkActionsService { } private _getDossier(files: File[]): Dossier { - return this._dossiersService.find(files[0].dossierId); + return this._activeDossiersService.find(files[0].dossierId); } private _assignFiles(files: File[], mode: 'reviewer' | 'approver', ignoreChanged = false, withUnassignedOption = false) { diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossier-documents-status/dossier-documents-status.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossier-documents-status/dossier-documents-status.component.ts index 00fc9084f..70d9ae838 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossier-documents-status/dossier-documents-status.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossier-documents-status/dossier-documents-status.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnChanges } from '@angular/core'; import { DossierStats, StatusSorter } from '../../../../../../../../../../libs/red-domain/src'; -import { List, StatusBarConfig } from '../../../../../../../../../../libs/common-ui/src'; +import { List, StatusBarConfig } from '@iqser/common-ui'; @Component({ selector: 'redaction-dossier-documents-status', diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-actions/dossiers-listing-actions.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-actions/dossiers-listing-actions.component.ts index 80b56d553..4dae58539 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-actions/dossiers-listing-actions.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-actions/dossiers-listing-actions.component.ts @@ -8,7 +8,7 @@ import { LongPressEvent } from '@shared/directives/long-press.directive'; import { UserPreferenceService } from '@services/user-preference.service'; import { FilesMapService } from '@services/entity-services/files-map.service'; import { ReanalysisService } from '@services/reanalysis.service'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { firstValueFrom } from 'rxjs'; @Component({ @@ -32,13 +32,17 @@ export class DossiersListingActionsComponent implements OnChanges { constructor( private readonly _reanalysisService: ReanalysisService, private readonly _userService: UserService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, readonly permissionsService: PermissionsService, readonly filesMapService: FilesMapService, private readonly _dialogService: DossiersDialogService, private readonly _userPreferenceService: UserPreferenceService, ) {} + get scrollableParentView(): ScrollableParentView { + return ScrollableParentViews.VIRTUAL_SCROLL; + } + ngOnChanges() { this.files = this.filesMapService.get(this.dossier.dossierId); this.displayReanalyseBtn = this.permissionsService.displayReanalyseBtn(this.dossier) && this.analysisForced; @@ -56,8 +60,4 @@ export class DossiersListingActionsComponent implements OnChanges { $event.stopPropagation(); await firstValueFrom(this._reanalysisService.reanalyzeDossier(id)); } - - get scrollableParentView(): ScrollableParentView { - return ScrollableParentViews.VIRTUAL_SCROLL; - } } diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-details/dossiers-listing-details.component.html b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-details/dossiers-listing-details.component.html index 75ad9ceb1..77a4a51e0 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-details/dossiers-listing-details.component.html +++ b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-details/dossiers-listing-details.component.html @@ -7,7 +7,7 @@ [subtitle]="'dossier-listing.stats.charts.dossiers' | translate: { count: config[0].value }" > -
+
diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-details/dossiers-listing-details.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-details/dossiers-listing-details.component.ts index 8a2997f48..093747465 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-details/dossiers-listing-details.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-details/dossiers-listing-details.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, Component } from '@angular/core'; import { DoughnutChartConfig } from '@shared/components/simple-doughnut-chart/simple-doughnut-chart.component'; import { FilterService, mapEach } from '@iqser/common-ui'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { combineLatest, Observable } from 'rxjs'; import { DossierStats, FileCountPerWorkflowStatus, StatusSorter } from '@red/domain'; import { workflowFileStatusTranslations } from '../../../../translations/file-status-translations'; @@ -23,25 +23,25 @@ export class DossiersListingDetailsComponent { constructor( readonly filterService: FilterService, - readonly dossiersService: DossiersService, + readonly activeDossiersService: ActiveDossiersService, private readonly _dossierStatsMap: DossierStatsService, private readonly _translateChartService: TranslateChartService, private readonly _dossierStateService: DossierStateService, private readonly _translateService: TranslateService, ) { - this.documentsChartData$ = this.dossiersService.all$.pipe( + this.documentsChartData$ = this.activeDossiersService.all$.pipe( mapEach(dossier => _dossierStatsMap.watch$(dossier.dossierId)), switchMap(stats$ => combineLatest(stats$)), filter(stats => !stats.some(s => s === undefined)), map(stats => this._toChartData(stats)), ); - this.dossiersChartData$ = this.dossiersService.all$.pipe(switchMap(dossiers => this._toDossierChartData())); + this.dossiersChartData$ = this.activeDossiersService.all$.pipe(switchMap(dossiers => this._toDossierChartData())); } private async _toDossierChartData(): Promise { this._dossierStateService.all.forEach( - state => (state.dossierCount = this.dossiersService.getCountWithState(state.dossierStatusId)), + state => (state.dossierCount = this.activeDossiersService.getCountWithState(state.dossierStatusId)), ); const configArray: DoughnutChartConfig[] = [ ...this._dossierStateService.all @@ -54,7 +54,7 @@ export class DossiersListingDetailsComponent { .values(), ]; - const notAssignedLength = this.dossiersService.all.length - configArray.map(v => v.value).reduce((acc, val) => acc + val, 0); + const notAssignedLength = this.activeDossiersService.all.length - configArray.map(v => v.value).reduce((acc, val) => acc + val, 0); configArray.push({ value: notAssignedLength, label: this._translateService.instant('edit-dossier-dialog.general-info.form.dossier-status.placeholder'), diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/screen/dossiers-listing-screen.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/screen/dossiers-listing-screen.component.ts index d70a2ae00..c701a66bb 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/screen/dossiers-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/screen/dossiers-listing-screen.component.ts @@ -8,7 +8,7 @@ import { DossiersDialogService } from '../../../services/dossiers-dialog.service import { DefaultListingServicesTmp, EntitiesService, ListingComponent, OnAttach, TableComponent } from '@iqser/common-ui'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { ConfigService } from '../config.service'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { FilesService } from '@services/entity-services/files.service'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; import { tap } from 'rxjs/operators'; @@ -18,7 +18,7 @@ import { tap } from 'rxjs/operators'; styleUrls: ['./dossiers-listing-screen.component.scss'], providers: [ ...DefaultListingServicesTmp, - { provide: EntitiesService, useExisting: DossiersService }, + { provide: EntitiesService, useExisting: ActiveDossiersService }, { provide: ListingComponent, useExisting: forwardRef(() => DossiersListingScreenComponent) }, ], changeDetection: ChangeDetectionStrategy.OnPush, @@ -40,7 +40,7 @@ export class DossiersListingScreenComponent extends ListingComponent im protected readonly _injector: Injector, private readonly _userService: UserService, readonly permissionsService: PermissionsService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _dialogService: DossiersDialogService, private readonly _translateChartService: TranslateChartService, private readonly _configService: ConfigService, @@ -55,7 +55,7 @@ export class DossiersListingScreenComponent extends ListingComponent im } ngOnInit(): void { - this.addSubscription = this._dossiersService.all$.pipe(tap(() => this._computeAllFilters())).subscribe(); + this.addSubscription = this._activeDossiersService.all$.pipe(tap(() => this._computeAllFilters())).subscribe(); } ngOnAttach(): void { diff --git a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/annotation-actions/annotation-actions.component.ts b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/annotation-actions/annotation-actions.component.ts index fb5dff0c2..4451c3977 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/annotation-actions/annotation-actions.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/annotation-actions/annotation-actions.component.ts @@ -8,7 +8,7 @@ import { UserService } from '@services/user.service'; import { AnnotationReferencesService } from '../../services/annotation-references.service'; import { MultiSelectService } from '../../services/multi-select.service'; import { FilePreviewStateService } from '../../services/file-preview-state.service'; -import { HelpModeService, ScrollableParentView, ScrollableParentViews } from '../../../../../../../../../../libs/common-ui/src'; +import { HelpModeService, ScrollableParentView, ScrollableParentViews } from '@iqser/common-ui'; export const AnnotationButtonTypes = { dark: 'dark', @@ -72,6 +72,10 @@ export class AnnotationActionsComponent implements OnChanges { return this.annotations?.length === 1 && this.annotations?.[0].resizing; } + get scrollableParentView(): ScrollableParentView { + return ScrollableParentViews.ANNOTATIONS_LIST; + } + async ngOnChanges(): Promise { await this._setPermissions(); } @@ -115,10 +119,6 @@ export class AnnotationActionsComponent implements OnChanges { this.annotationActionsService.cancelResize($event, this.viewer, this.annotations[0], this.annotationsChanged); } - get scrollableParentView(): ScrollableParentView { - return ScrollableParentViews.ANNOTATIONS_LIST; - } - private async _setPermissions() { const dossier = await this._state.dossier; this.annotationPermissions = AnnotationPermissions.forUser( diff --git a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/document-info/document-info.component.ts b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/document-info/document-info.component.ts index 323443061..2e4dc612d 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/document-info/document-info.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/document-info/document-info.component.ts @@ -3,7 +3,7 @@ import { DossiersDialogService } from '../../../../services/dossiers-dialog.serv import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; import { DocumentInfoService } from '../../services/document-info.service'; import { combineLatest, Observable, switchMap } from 'rxjs'; -import { PermissionsService } from '../../../../../../services/permissions.service'; +import { PermissionsService } from '@services/permissions.service'; import { FilePreviewStateService } from '../../services/file-preview-state.service'; import { map } from 'rxjs/operators'; import { File } from '@red/domain'; diff --git a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/user-management/user-management.component.ts b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/user-management/user-management.component.ts index 075571ce1..91e2c5eee 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/user-management/user-management.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/user-management/user-management.component.ts @@ -11,7 +11,7 @@ import { TranslateService } from '@ngx-translate/core'; import { BehaviorSubject, combineLatest, firstValueFrom, Observable, switchMap } from 'rxjs'; import { FilePreviewStateService } from '../../services/file-preview-state.service'; import { distinctUntilChanged, map } from 'rxjs/operators'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; @Component({ selector: 'redaction-user-management', @@ -42,9 +42,9 @@ export class UserManagementComponent { readonly loadingService: LoadingService, readonly translateService: TranslateService, readonly stateService: FilePreviewStateService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, ) { - this._dossier$ = this.stateService.file$.pipe(switchMap(file => this._dossiersService.getEntityChanged$(file.dossierId))); + this._dossier$ = this.stateService.file$.pipe(switchMap(file => this._activeDossiersService.getEntityChanged$(file.dossierId))); this.statusBarConfig$ = this.stateService.file$.pipe(map(file => [{ length: 1, color: file.workflowStatus }])); this.assignTooltip$ = this.stateService.file$.pipe( map(file => diff --git a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/dialogs/accept-recommendation-dialog/accept-recommendation-dialog.component.ts b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/dialogs/accept-recommendation-dialog/accept-recommendation-dialog.component.ts index 7b513bd5b..73ae1d051 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/dialogs/accept-recommendation-dialog/accept-recommendation-dialog.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/dialogs/accept-recommendation-dialog/accept-recommendation-dialog.component.ts @@ -3,7 +3,7 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { PermissionsService } from '@services/permissions.service'; import { Dictionary, Dossier } from '@red/domain'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { BaseDialogComponent } from '@iqser/common-ui'; import { DictionaryService } from '@shared/services/dictionary.service'; import { ManualAnnotationService } from '../../../../services/manual-annotation.service'; @@ -33,14 +33,14 @@ export class AcceptRecommendationDialogComponent extends BaseDialogComponent imp private readonly _formBuilder: FormBuilder, private readonly _manualAnnotationService: ManualAnnotationService, private readonly _permissionsService: PermissionsService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _dictionaryService: DictionaryService, protected readonly _injector: Injector, protected readonly _dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) readonly data: AcceptRecommendationData, ) { super(_injector, _dialogRef); - this._dossier = this._dossiersService.find(this.data.dossierId); + this._dossier = this._activeDossiersService.find(this.data.dossierId); this.isDocumentAdmin = this._permissionsService.isApprover(this._dossier); this.form = this._getForm(); this.initialFormValue = this.form.getRawValue(); diff --git a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-providers.ts b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-providers.ts index 79d5b5720..037a36118 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-providers.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-providers.ts @@ -9,7 +9,7 @@ import { AnnotationActionsService } from './services/annotation-actions.service' import { FilePreviewStateService } from './services/file-preview-state.service'; import { PdfViewerDataService } from '../../services/pdf-viewer-data.service'; import { AnnotationReferencesService } from './services/annotation-references.service'; -import { FilterService } from '../../../../../../../../libs/common-ui/src'; +import { FilterService } from '@iqser/common-ui'; export const filePreviewScreenProviders = [ FilterService, diff --git a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts index fc17cf93a..509e9af3e 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts @@ -34,7 +34,7 @@ import { clearStamps, stampPDFPage } from '@utils/page-stamper'; import { TranslateService } from '@ngx-translate/core'; import { handleFilterDelta } from '@utils/filter-utils'; import { FilesService } from '@services/entity-services/files.service'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { FileManagementService } from '@services/entity-services/file-management.service'; import { catchError, map, switchMap, tap } from 'rxjs/operators'; import { FilesMapService } from '@services/entity-services/files-map.service'; @@ -104,7 +104,7 @@ export class FilePreviewScreenComponent extends AutoUnsubscribe implements OnIni private readonly _filterService: FilterService, private readonly _translateService: TranslateService, private readonly _filesMapService: FilesMapService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _reanalysisService: ReanalysisService, private readonly _errorService: ErrorService, private readonly _skippedService: SkippedService, @@ -200,7 +200,7 @@ export class FilePreviewScreenComponent extends AutoUnsubscribe implements OnIni async ngOnAttach(previousRoute: ActivatedRouteSnapshot): Promise { const file = await this.stateService.file; if (!file.canBeOpened) { - return this._router.navigate([this._dossiersService.find(this.dossierId)?.routerLink]); + return this._router.navigate([this._activeDossiersService.find(this.dossierId)?.routerLink]); } this.viewModeService.compareMode = false; this.viewModeService.switchToStandard(); @@ -487,7 +487,7 @@ export class FilePreviewScreenComponent extends AutoUnsubscribe implements OnIni await clearStamps(pdfDoc, pdfNet, allPages); if (this.viewModeService.isRedacted) { - const dossier = this._dossiersService.find(this.dossierId); + const dossier = this._activeDossiersService.find(this.dossierId); if (dossier.watermarkPreviewEnabled) { await this._stampPreview(pdfDoc, dossier.dossierTemplateId); } @@ -541,7 +541,7 @@ export class FilePreviewScreenComponent extends AutoUnsubscribe implements OnIni .pipe(switchMap(() => this._filesService.reload(this.dossierId, this.fileId))) .subscribe(); - this.addActiveScreenSubscription = this._dossiersService + this.addActiveScreenSubscription = this._activeDossiersService .getEntityDeleted$(this.dossierId) .pipe(tap(() => this._handleDeletedDossier())) .subscribe(); @@ -570,7 +570,7 @@ export class FilePreviewScreenComponent extends AutoUnsubscribe implements OnIni private async _loadFileData(file: File): Promise { if (!file || file.isError) { - return this._router.navigate([this._dossiersService.find(this.dossierId).routerLink]); + return this._router.navigate([this._activeDossiersService.find(this.dossierId).routerLink]); } if (file.isUnprocessed) { diff --git a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/services/annotation-actions.service.ts b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/services/annotation-actions.service.ts index 29b31a0e8..64b334e7e 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/services/annotation-actions.service.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/services/annotation-actions.service.ts @@ -14,7 +14,7 @@ import { Dossier, IAddRedactionRequest, ILegalBasisChangeRequest, IRectangle, IR import { toPosition } from '../../../utils/pdf-calculation.utils'; import { AnnotationDrawService } from './annotation-draw.service'; import { translateQuads } from '@utils/pdf-coordinates'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { AcceptRecommendationData, AcceptRecommendationDialogComponent, @@ -38,12 +38,12 @@ export class AnnotationActionsService { private readonly _dialogService: DossiersDialogService, private readonly _dialog: MatDialog, private readonly _annotationDrawService: AnnotationDrawService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _screenStateService: FilePreviewStateService, ) {} private get _dossier(): Dossier { - return this._dossiersService.find(this._screenStateService.dossierId); + return this._activeDossiersService.find(this._screenStateService.dossierId); } acceptSuggestion($event: MouseEvent, annotations: AnnotationWrapper[], annotationsChanged: EventEmitter) { diff --git a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/services/annotation-draw.service.ts b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/services/annotation-draw.service.ts index 173a752c3..ba68fc852 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/services/annotation-draw.service.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/services/annotation-draw.service.ts @@ -3,7 +3,7 @@ import { Core, WebViewerInstance } from '@pdftron/webviewer'; import { hexToRgb } from '@utils/functions'; import { AnnotationWrapper } from '@models/file/annotation.wrapper'; import { UserPreferenceService } from '@services/user-preference.service'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { RedactionLogService } from '../../../services/redaction-log.service'; import { environment } from '@environments/environment'; @@ -21,7 +21,7 @@ export class AnnotationDrawService { constructor( private readonly _dictionariesMapService: DictionariesMapService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _redactionLogService: RedactionLogService, private readonly _userPreferenceService: UserPreferenceService, private readonly _skippedService: SkippedService, @@ -128,7 +128,7 @@ export class AnnotationDrawService { } private _computeSection(activeViewer: WebViewerInstance, pageNumber: number, sectionRectangle: ISectionRectangle, dossierId: string) { - const dossierTemplateId = this._dossiersService.find(dossierId).dossierTemplateId; + const dossierTemplateId = this._activeDossiersService.find(dossierId).dossierTemplateId; const rectangleAnnot = new activeViewer.Core.Annotations.RectangleAnnotation(); const pageHeight = activeViewer.Core.documentViewer.getPageHeight(pageNumber); const rectangle: IRectangle = { @@ -156,7 +156,7 @@ export class AnnotationDrawService { compareMode: boolean, ) { const pageNumber = compareMode ? annotationWrapper.pageNumber * 2 - 1 : annotationWrapper.pageNumber; - const dossierTemplateId = this._dossiersService.find(dossierId).dossierTemplateId; + const dossierTemplateId = this._activeDossiersService.find(dossierId).dossierTemplateId; let annotation: Core.Annotations.RectangleAnnotation | Core.Annotations.TextHighlightAnnotation; if (annotationWrapper.rectangle || annotationWrapper.isImage) { diff --git a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/services/file-preview-state.service.ts b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/services/file-preview-state.service.ts index 961597d46..d36846a7f 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/services/file-preview-state.service.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/services/file-preview-state.service.ts @@ -2,10 +2,10 @@ import { Injectable } from '@angular/core'; import { BehaviorSubject, firstValueFrom, Observable, pairwise, switchMap } from 'rxjs'; import { FileDataModel } from '@models/file/file-data.model'; import { Dossier, File } from '@red/domain'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { ActivatedRoute } from '@angular/router'; import { FilesMapService } from '@services/entity-services/files-map.service'; -import { PermissionsService } from '../../../../../services/permissions.service'; +import { PermissionsService } from '@services/permissions.service'; import { boolFactory, shareLast } from '@iqser/common-ui'; import { filter, startWith } from 'rxjs/operators'; import { FileManagementService } from '@services/entity-services/file-management.service'; @@ -27,7 +27,7 @@ export class FilePreviewStateService { readonly #fileData$ = new BehaviorSubject(undefined); constructor( - dossiersService: DossiersService, + activeDossiersService: ActiveDossiersService, filesMapService: FilesMapService, permissionsService: PermissionsService, activatedRoute: ActivatedRoute, @@ -35,9 +35,9 @@ export class FilePreviewStateService { ) { this.fileId = activatedRoute.snapshot.paramMap.get(FILE_ID); this.dossierId = activatedRoute.snapshot.paramMap.get(DOSSIER_ID); - this.dossierTemplateId = dossiersService.find(this.dossierId).dossierTemplateId; + this.dossierTemplateId = activeDossiersService.find(this.dossierId).dossierTemplateId; - this.dossier$ = dossiersService.getEntityChanged$(this.dossierId); + this.dossier$ = activeDossiersService.getEntityChanged$(this.dossierId); this.file$ = filesMapService.watch$(this.dossierId, this.fileId); [this.isReadonly$, this.isWritable$] = boolFactory(this.file$, file => !permissionsService.canPerformAnnotationActions(file)); diff --git a/apps/red-ui/src/app/modules/dossier/screens/search-screen/search-screen.component.ts b/apps/red-ui/src/app/modules/dossier/screens/search-screen/search-screen.component.ts index 71a3b1244..c5acc767d 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/search-screen/search-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/search-screen/search-screen.component.ts @@ -17,7 +17,7 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { workflowFileStatusTranslations } from '../../translations/file-status-translations'; import { TranslateService } from '@ngx-translate/core'; import { RouterHistoryService } from '@services/router-history.service'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { Dossier, IMatchedDocument, ISearchListItem, ISearchResponse } from '@red/domain'; import { FilesMapService } from '@services/entity-services/files-map.service'; import { PlatformSearchService } from '@services/entity-services/platform-search.service'; @@ -56,7 +56,7 @@ export class SearchScreenComponent extends ListingComponent imp protected readonly _injector: Injector, private readonly _activatedRoute: ActivatedRoute, private readonly _loadingService: LoadingService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, readonly routerHistoryService: RouterHistoryService, private readonly _translateService: TranslateService, private readonly _filesMapService: FilesMapService, @@ -76,7 +76,7 @@ export class SearchScreenComponent extends ListingComponent imp label: this._translateService.instant('search-screen.filters.by-dossier'), filterceptionPlaceholder: this._translateService.instant('search-screen.filters.search-placeholder'), icon: 'red:folder', - filters: this._dossiersService.all.map(dossierToFilter), + filters: this._activeDossiersService.all.map(dossierToFilter), checker: keyChecker('dossierId'), }; this.filterService.addFilterGroups([dossierNameFilter]); @@ -137,7 +137,7 @@ export class SearchScreenComponent extends ListingComponent imp status: file.workflowStatus, assignee: file.assignee, numberOfPages: file.numberOfPages, - dossierName: this._dossiersService.find(dossierId).dossierName, + dossierName: this._activeDossiersService.find(dossierId).dossierName, filename: file.filename, searchKey: score.toString(), routerLink: `/main/dossiers/${dossierId}/file/${fileId}`, diff --git a/apps/red-ui/src/app/modules/dossier/services/manual-annotation.service.ts b/apps/red-ui/src/app/modules/dossier/services/manual-annotation.service.ts index 65085a4d1..e0e7ed10c 100644 --- a/apps/red-ui/src/app/modules/dossier/services/manual-annotation.service.ts +++ b/apps/red-ui/src/app/modules/dossier/services/manual-annotation.service.ts @@ -17,7 +17,7 @@ import { AnnotationActionMode } from '../models/annotation-action-mode.model'; import { annotationActionsTranslations } from '../translations/annotation-actions-translations'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { HttpErrorResponse, HttpStatusCode } from '@angular/common/http'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { Observable } from 'rxjs'; import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service'; @@ -31,7 +31,7 @@ export class ManualAnnotationService extends GenericService private readonly _dictionariesMapService: DictionariesMapService, private readonly _toaster: Toaster, private readonly _permissionsService: PermissionsService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, protected readonly _injector: Injector, ) { super(_injector, 'manualRedaction'); @@ -371,7 +371,7 @@ export class ManualAnnotationService extends GenericService } private _dossier(dossierId: string): Dossier { - return this._dossiersService.find(dossierId); + return this._activeDossiersService.find(dossierId); } private _getMessage(mode: AnnotationActionMode, modifyDictionary?: boolean, error = false, isConflict = false) { diff --git a/apps/red-ui/src/app/modules/dossier/shared/components/file-actions/file-actions.component.ts b/apps/red-ui/src/app/modules/dossier/shared/components/file-actions/file-actions.component.ts index edfe8b159..94f197511 100644 --- a/apps/red-ui/src/app/modules/dossier/shared/components/file-actions/file-actions.component.ts +++ b/apps/red-ui/src/app/modules/dossier/shared/components/file-actions/file-actions.component.ts @@ -28,7 +28,7 @@ import { UserService } from '@services/user.service'; import { UserPreferenceService } from '@services/user-preference.service'; import { LongPressEvent } from '@shared/directives/long-press.directive'; import { FileAssignService } from '../../services/file-assign.service'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { FileManagementService } from '@services/entity-services/file-management.service'; import { FilesService } from '@services/entity-services/files.service'; import { ReanalysisService, ReanalyzeQueryParams } from '@services/reanalysis.service'; @@ -93,7 +93,7 @@ export class FileActionsComponent extends AutoUnsubscribe implements OnDestroy, @Optional() private readonly _excludedPagesService: ExcludedPagesService, @Optional() private readonly _documentInfoService: DocumentInfoService, private readonly _permissionsService: PermissionsService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _dialogService: DossiersDialogService, private readonly _fileAssignService: FileAssignService, private readonly _loadingService: LoadingService, @@ -255,7 +255,7 @@ export class FileActionsComponent extends AutoUnsubscribe implements OnDestroy, } ngOnInit() { - this.addSubscription = this._dossiersService + this.addSubscription = this._activeDossiersService .getEntityChanged$(this.file.dossierId) .pipe(tap(() => this._setup())) .subscribe(); @@ -285,11 +285,6 @@ export class FileActionsComponent extends AutoUnsubscribe implements OnDestroy, ); } - private _triggerImportRedactions($event: MouseEvent) { - $event.stopPropagation(); - this.importRedactionsInput.nativeElement.click(); - } - async importRedactions(files: FileList) { const fileToImport = files[0]; @@ -311,6 +306,11 @@ export class FileActionsComponent extends AutoUnsubscribe implements OnDestroy, this._setup(); } + private _triggerImportRedactions($event: MouseEvent) { + $event.stopPropagation(); + this.importRedactionsInput.nativeElement.click(); + } + private _openDeleteFileDialog($event: MouseEvent) { this._dialogService.openDialog( 'confirm', @@ -322,7 +322,7 @@ export class FileActionsComponent extends AutoUnsubscribe implements OnDestroy, async () => { this._loadingService.start(); try { - const dossier = this._dossiersService.find(this.file.dossierId); + const dossier = this._activeDossiersService.find(this.file.dossierId); await firstValueFrom(this._fileManagementService.delete([this.file.fileId], this.file.dossierId)); await this._router.navigate([dossier.routerLink]); } catch (error) { diff --git a/apps/red-ui/src/app/modules/dossier/shared/services/file-assign.service.ts b/apps/red-ui/src/app/modules/dossier/shared/services/file-assign.service.ts index 0694e0588..eac7696a8 100644 --- a/apps/red-ui/src/app/modules/dossier/shared/services/file-assign.service.ts +++ b/apps/red-ui/src/app/modules/dossier/shared/services/file-assign.service.ts @@ -5,7 +5,7 @@ import { DossiersDialogService } from '../../services/dossiers-dialog.service'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { FilesService } from '@services/entity-services/files.service'; import { ConfirmationDialogInput, LoadingService, Toaster } from '@iqser/common-ui'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { firstValueFrom, Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; @@ -15,7 +15,7 @@ export class FileAssignService { private readonly _dialogService: DossiersDialogService, private readonly _userService: UserService, private readonly _filesService: FilesService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _loadingService: LoadingService, private readonly _toaster: Toaster, ) {} @@ -53,7 +53,7 @@ export class FileAssignService { $event?.stopPropagation(); const currentUserId = this._userService.currentUser.id; - const currentDossier = this._dossiersService.find(file.dossierId); + const currentDossier = this._activeDossiersService.find(file.dossierId); const eligibleUsersIds = this._getUserIds(mode, currentDossier); if (file.isNew) { diff --git a/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.html b/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.html index 8b54d5c02..8050b4264 100644 --- a/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.html +++ b/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.html @@ -51,7 +51,7 @@
-
+
{{ selectDossier.dossierName | translate }} diff --git a/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts b/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts index 839c80693..c662e3a2c 100644 --- a/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts @@ -5,7 +5,7 @@ import { catchError, map, take, tap } from 'rxjs/operators'; import { Dictionary, Dossier, DossierTemplate } from '@red/domain'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { DictionaryService } from '@shared/services/dictionary.service'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; import { EditorComponent } from '@shared/components/editor/editor.component'; import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service'; @@ -47,7 +47,7 @@ export class DictionaryManagerComponent implements OnChanges { constructor( private readonly _dictionaryService: DictionaryService, private readonly _dictionariesMapService: DictionariesMapService, - readonly dossiersService: DossiersService, + readonly activeDossiersService: ActiveDossiersService, readonly dossierTemplatesService: DossierTemplatesService, ) {} diff --git a/apps/red-ui/src/app/modules/shared/components/dossiers-listing-dossier-name/dossiers-listing-dossier-name.component.ts b/apps/red-ui/src/app/modules/shared/components/dossiers-listing-dossier-name/dossiers-listing-dossier-name.component.ts index d4b86aa17..82789c4dc 100644 --- a/apps/red-ui/src/app/modules/shared/components/dossiers-listing-dossier-name/dossiers-listing-dossier-name.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/dossiers-listing-dossier-name/dossiers-listing-dossier-name.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; import { Dossier, DossierStats } from '@red/domain'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import * as moment from 'moment'; const DUE_DATE_WARN_DAYS = 14; @@ -16,7 +16,10 @@ export class DossiersListingDossierNameComponent { @Input() dossier: Dossier; @Input() dossierStats: DossierStats; - constructor(private readonly _dossierTemplatesService: DossierTemplatesService, private readonly _dossiersService: DossiersService) {} + constructor( + private readonly _dossierTemplatesService: DossierTemplatesService, + private readonly _activeDossiersService: ActiveDossiersService, + ) {} get approachingDueDate(): boolean { return this._dueDateDaysDiff >= 0 && this._dueDateDaysDiff <= DUE_DATE_WARN_DAYS; diff --git a/apps/red-ui/src/app/modules/upload-download/file-drop/file-drop.component.ts b/apps/red-ui/src/app/modules/upload-download/file-drop/file-drop.component.ts index ca0b84888..856066818 100644 --- a/apps/red-ui/src/app/modules/upload-download/file-drop/file-drop.component.ts +++ b/apps/red-ui/src/app/modules/upload-download/file-drop/file-drop.component.ts @@ -2,7 +2,7 @@ import { ChangeDetectorRef, Component, HostListener, Inject } from '@angular/cor import { FileUploadService } from '../services/file-upload.service'; import { OverlayRef } from '@angular/cdk/overlay'; import { StatusOverlayService } from '../services/status-overlay.service'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from '@services/entity-services/active-dossiers.service'; import { handleFileDrop } from '@utils/file-drop-utils'; import { FileUploadModel } from '@upload-download/model/file-upload.model'; import { DOSSIER_ID } from '../../../tokens'; @@ -15,7 +15,7 @@ export class FileDropComponent { constructor( private readonly _dialogRef: OverlayRef, private readonly _fileUploadService: FileUploadService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _changeDetectorRef: ChangeDetectorRef, private readonly _statusOverlayService: StatusOverlayService, @Inject(DOSSIER_ID) private readonly _dossierId: string, @@ -34,7 +34,7 @@ export class FileDropComponent { @HostListener('drop', ['$event']) onDrop(event: DragEvent) { - const dossier = this._dossiersService.find(this._dossierId); + const dossier = this._activeDossiersService.find(this._dossierId); handleFileDrop(event, dossier, this.uploadFiles.bind(this)); } diff --git a/apps/red-ui/src/app/services/breadcrumbs.service.ts b/apps/red-ui/src/app/services/breadcrumbs.service.ts index e818cb3db..2602d59e5 100644 --- a/apps/red-ui/src/app/services/breadcrumbs.service.ts +++ b/apps/red-ui/src/app/services/breadcrumbs.service.ts @@ -4,7 +4,7 @@ import { ActivatedRouteSnapshot, IsActiveMatchOptions, NavigationEnd, Router } f import { BehaviorSubject, Observable, of } from 'rxjs'; import { filter, pluck } from 'rxjs/operators'; import { FilesMapService } from '@services/entity-services/files-map.service'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from './entity-services/active-dossiers.service'; import { TranslateService } from '@ngx-translate/core'; import { BreadcrumbTypes } from '@red/domain'; import { DOSSIER_ID, FILE_ID } from '@utils/constants'; @@ -37,7 +37,7 @@ export class BreadcrumbsService { private readonly _router: Router, private readonly _translateService: TranslateService, private readonly _filesMapService: FilesMapService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, ) { this.breadcrumbs$ = this._store$.asObservable(); @@ -137,7 +137,7 @@ export class BreadcrumbsService { private _addDossierBreadcrumb(route: ActivatedRouteSnapshot): void { const dossierId = route.paramMap.get(DOSSIER_ID); this._append({ - name$: this._dossiersService.getEntityChanged$(dossierId).pipe(pluck('dossierName')), + name$: this._activeDossiersService.getEntityChanged$(dossierId).pipe(pluck('dossierName')), type: 'text' as BreadcrumbDisplayType, options: { routerLink: ['/main', 'dossiers', dossierId], diff --git a/apps/red-ui/src/app/services/entity-services/active-dossiers.service.ts b/apps/red-ui/src/app/services/entity-services/active-dossiers.service.ts new file mode 100644 index 000000000..0b22e665d --- /dev/null +++ b/apps/red-ui/src/app/services/entity-services/active-dossiers.service.ts @@ -0,0 +1,133 @@ +import { Injectable, Injector } from '@angular/core'; +import { List, QueryParam, RequiredParam, Toaster, Validate } from '@iqser/common-ui'; +import { Dossier, DossierStats, IDossier, IDossierRequest } from '@red/domain'; +import { catchError, filter, map, mapTo, pluck, switchMap, tap } from 'rxjs/operators'; +import { firstValueFrom, forkJoin, Observable, of, Subject, throwError, timer } from 'rxjs'; +import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; +import { HttpErrorResponse, HttpStatusCode } from '@angular/common/http'; +import { CHANGED_CHECK_INTERVAL } from '@utils/constants'; +import { DossiersService } from '@services/entity-services/dossiers.service'; + +export interface IDossiersStats { + totalPeople: number; + totalAnalyzedPages: number; +} + +interface DossierChange { + readonly dossierChanges: boolean; + readonly dossierId: string; + readonly fileChanges: boolean; +} + +type DossierChanges = readonly DossierChange[]; + +interface ChangesDetails { + readonly dossierChanges: DossierChanges; +} + +const DOSSIER_EXISTS_MSG = _('add-dossier-dialog.errors.dossier-already-exists'); +const GENERIC_MSG = _('add-dossier-dialog.errors.generic'); + +@Injectable({ + providedIn: 'root', +}) +export class ActiveDossiersService extends DossiersService { + readonly dossierFileChanges$ = new Subject(); + + constructor(private readonly _toaster: Toaster, protected readonly _injector: Injector) { + super(_injector, 'dossier'); + + timer(CHANGED_CHECK_INTERVAL, CHANGED_CHECK_INTERVAL) + .pipe( + switchMap(() => this.loadOnlyChanged()), + tap(changes => this.#emitFileChanges(changes)), + ) + .subscribe(); + } + + loadOnlyChanged(): Observable { + const removeIfNotFound = (id: string) => + catchError((error: HttpErrorResponse) => { + if (error.status === HttpStatusCode.NotFound) { + this.remove(id); + return of([]); + } + return throwError(() => error); + }); + + const load = (changes: DossierChanges) => + changes.map(change => this._load(change.dossierId).pipe(removeIfNotFound(change.dossierId))); + + return this.hasChangesDetails$().pipe( + pluck('dossierChanges'), + switchMap(dossierChanges => forkJoin(load(dossierChanges)).pipe(mapTo(dossierChanges))), + tap(() => this._updateLastChanged()), + ); + } + + hasChangesDetails$(): Observable { + const body = { value: this._lastCheckedForChanges.get('root') ?? '0' }; + return this._post(body, `${this._defaultModelPath}/changes/details`).pipe( + filter(changes => changes.dossierChanges.length > 0), + ); + } + + @Validate() + createOrUpdate(@RequiredParam() dossier: IDossierRequest): Observable { + const showToast = (error: HttpErrorResponse) => { + this._toaster.error(error.status === HttpStatusCode.Conflict ? DOSSIER_EXISTS_MSG : GENERIC_MSG); + return of(undefined); + }; + + return this._post(dossier).pipe( + switchMap(newDossier => this.loadAll().pipe(map(() => this.find(newDossier.dossierId)))), + catchError(showToast), + ); + } + + getDeleted(): Promise { + return firstValueFrom(this.getAll('deleted-dossiers')); + } + + delete(dossier: Dossier): Observable { + const showToast = () => { + this._toaster.error(_('dossier-listing.delete.delete-failed'), { params: dossier }); + return of({}); + }; + return super.delete(dossier.dossierId).pipe( + tap(() => this.#removeDossiers([dossier])), + catchError(showToast), + ); + } + + @Validate() + restore(@RequiredParam() dossierIds: List): Promise { + return firstValueFrom(this._post(dossierIds, 'deleted-dossiers/restore').pipe(switchMap(() => this.loadAll()))); + } + + @Validate() + hardDelete(@RequiredParam() dossierIds: List): Promise { + const body = dossierIds.map(id => ({ key: 'dossierId', value: id })); + return firstValueFrom(super.delete(body, 'deleted-dossiers/hard-delete', body)); + } + + getCountWithState(dossierStatusId: string): number { + return this.all.filter(dossier => dossier.dossierStatusId === dossierStatusId).length; + } + + #removeDossiers(dossiers: Dossier[]): void { + this.setEntities(this.all.filter(dossier => !dossiers.find(d => dossier.id === d.id))); + } + + private _load(id: string, queryParams?: List): Observable { + return super._getOne([id], this._defaultModelPath, queryParams).pipe( + map(entity => new Dossier(entity)), + tap(dossier => this.replace(dossier)), + switchMap(dossier => this._dossierStatsService.getFor([dossier.dossierId])), + ); + } + + #emitFileChanges(dossierChanges: DossierChanges): void { + dossierChanges.filter(change => change.fileChanges).forEach(change => this.dossierFileChanges$.next(change.dossierId)); + } +} diff --git a/apps/red-ui/src/app/services/entity-services/archived-dossiers.service.ts b/apps/red-ui/src/app/services/entity-services/archived-dossiers.service.ts index 9721d69ab..50709d769 100644 --- a/apps/red-ui/src/app/services/entity-services/archived-dossiers.service.ts +++ b/apps/red-ui/src/app/services/entity-services/archived-dossiers.service.ts @@ -1,36 +1,20 @@ import { Injectable, Injector } from '@angular/core'; -import { EntitiesService, mapEach, Toaster } from '@iqser/common-ui'; -import { Dossier, IDossier } from '@red/domain'; -import { catchError, mapTo, switchMap, tap } from 'rxjs/operators'; +import { Toaster } from '@iqser/common-ui'; +import { Dossier } from '@red/domain'; +import { catchError, tap } from 'rxjs/operators'; import { Observable, of } from 'rxjs'; -import { DossierStateService } from '@services/entity-services/dossier-state.service'; -import { DossierStatsService } from '@services/entity-services/dossier-stats.service'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; +import { ActiveDossiersService } from './active-dossiers.service'; import { DossiersService } from '@services/entity-services/dossiers.service'; -@Injectable({ - providedIn: 'root', -}) -export class ArchivedDossiersService extends EntitiesService { +@Injectable({ providedIn: 'root' }) +export class ArchivedDossiersService extends DossiersService { constructor( protected readonly _injector: Injector, private readonly _toaster: Toaster, - private readonly _dossierStateService: DossierStateService, - private readonly _dossierStatsService: DossierStatsService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, ) { - super(_injector, Dossier, 'archived-dossiers'); - } - - loadAll(): Observable { - const dossierIds = (dossiers: Dossier[]) => dossiers.map(d => d.id); - return this.getAll().pipe( - mapEach(entity => new Dossier(entity)), - /* Load stats before updating entities */ - switchMap(dossiers => this._dossierStatsService.getFor(dossierIds(dossiers)).pipe(mapTo(dossiers))), - switchMap(dossiers => this._dossierStateService.loadAllForAllTemplates().pipe(mapTo(dossiers))), - tap(dossiers => this.setEntities(dossiers)), - ); + super(_injector, 'archived-dossiers'); } archive(dossiers: Dossier[]): Observable { @@ -48,6 +32,8 @@ export class ArchivedDossiersService extends EntitiesService } #removeDossiers(dossiers: Dossier[]): void { - this._dossiersService.setEntities(this._dossiersService.all.filter(dossier => !dossiers.find(d => dossier.id === d.id))); + this._activeDossiersService.setEntities( + this._activeDossiersService.all.filter(dossier => !dossiers.find(d => dossier.id === d.id)), + ); } } diff --git a/apps/red-ui/src/app/services/entity-services/dossiers.service.ts b/apps/red-ui/src/app/services/entity-services/dossiers.service.ts index 0af4262ff..cd2c67a19 100644 --- a/apps/red-ui/src/app/services/entity-services/dossiers.service.ts +++ b/apps/red-ui/src/app/services/entity-services/dossiers.service.ts @@ -1,55 +1,19 @@ -import { Injectable, Injector } from '@angular/core'; -import { EntitiesService, List, mapEach, QueryParam, RequiredParam, shareLast, Toaster, Validate } from '@iqser/common-ui'; -import { Dossier, DossierStats, IDossier, IDossierRequest } from '@red/domain'; -import { catchError, filter, map, mapTo, pluck, switchMap, tap } from 'rxjs/operators'; -import { combineLatest, firstValueFrom, forkJoin, Observable, of, Subject, throwError, timer } from 'rxjs'; -import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { HttpErrorResponse, HttpStatusCode } from '@angular/common/http'; -import { DossierStatsService } from '@services/entity-services/dossier-stats.service'; -import { CHANGED_CHECK_INTERVAL } from '@utils/constants'; -import { DossierStateService } from '@services/entity-services/dossier-state.service'; +import { EntitiesService, List, mapEach, shareLast } from '@iqser/common-ui'; +import { Dossier, IDossier } from '@red/domain'; +import { combineLatest, Observable } from 'rxjs'; +import { filter, map, mapTo, switchMap, tap } from 'rxjs/operators'; +import { Injector } from '@angular/core'; +import { DossierStateService } from './dossier-state.service'; +import { DossierStatsService } from './dossier-stats.service'; +import { IDossiersStats } from '@services/entity-services/active-dossiers.service'; -export interface IDossiersStats { - totalPeople: number; - totalAnalyzedPages: number; -} - -interface DossierChange { - readonly dossierChanges: boolean; - readonly dossierId: string; - readonly fileChanges: boolean; -} - -type DossierChanges = readonly DossierChange[]; - -interface ChangesDetails { - readonly dossierChanges: DossierChanges; -} - -const DOSSIER_EXISTS_MSG = _('add-dossier-dialog.errors.dossier-already-exists'); -const GENERIC_MSG = _('add-dossier-dialog.errors.generic'); - -@Injectable({ - providedIn: 'root', -}) -export class DossiersService extends EntitiesService { +export abstract class DossiersService extends EntitiesService { readonly generalStats$ = this.all$.pipe(switchMap(entities => this.#generalStats$(entities))); - readonly dossierFileChanges$ = new Subject(); + protected readonly _dossierStatsService = this._injector.get(DossierStatsService); + protected readonly _dossierStateService = this._injector.get(DossierStateService); - constructor( - private readonly _toaster: Toaster, - protected readonly _injector: Injector, - private readonly _dossierStatsService: DossierStatsService, - private readonly _dossierStateService: DossierStateService, - ) { - super(_injector, Dossier, 'dossier'); - - timer(CHANGED_CHECK_INTERVAL, CHANGED_CHECK_INTERVAL) - .pipe( - switchMap(() => this.loadOnlyChanged()), - tap(changes => this.#emitFileChanges(changes)), - ) - .subscribe(); + protected constructor(protected readonly _injector: Injector, protected readonly _path: string) { + super(_injector, Dossier, _path); } loadAll(): Observable { @@ -63,92 +27,6 @@ export class DossiersService extends EntitiesService { ); } - loadOnlyChanged(): Observable { - const removeIfNotFound = (id: string) => - catchError((error: HttpErrorResponse) => { - if (error.status === HttpStatusCode.NotFound) { - this.remove(id); - return of([]); - } - return throwError(() => error); - }); - - const load = (changes: DossierChanges) => - changes.map(change => this._load(change.dossierId).pipe(removeIfNotFound(change.dossierId))); - - return this.hasChangesDetails$().pipe( - pluck('dossierChanges'), - switchMap(dossierChanges => forkJoin(load(dossierChanges)).pipe(mapTo(dossierChanges))), - tap(() => this._updateLastChanged()), - ); - } - - hasChangesDetails$(): Observable { - const body = { value: this._lastCheckedForChanges.get('root') ?? '0' }; - return this._post(body, `${this._defaultModelPath}/changes/details`).pipe( - filter(changes => changes.dossierChanges.length > 0), - ); - } - - @Validate() - createOrUpdate(@RequiredParam() dossier: IDossierRequest): Observable { - const showToast = (error: HttpErrorResponse) => { - this._toaster.error(error.status === HttpStatusCode.Conflict ? DOSSIER_EXISTS_MSG : GENERIC_MSG); - return of(undefined); - }; - - return this._post(dossier).pipe( - switchMap(newDossier => this.loadAll().pipe(map(() => this.find(newDossier.dossierId)))), - catchError(showToast), - ); - } - - getDeleted(): Promise { - return firstValueFrom(this.getAll('deleted-dossiers')); - } - - delete(dossier: Dossier): Observable { - const showToast = () => { - this._toaster.error(_('dossier-listing.delete.delete-failed'), { params: dossier }); - return of({}); - }; - return super.delete(dossier.dossierId).pipe( - tap(() => this.#removeDossiers([dossier])), - catchError(showToast), - ); - } - - @Validate() - restore(@RequiredParam() dossierIds: List): Promise { - return firstValueFrom(this._post(dossierIds, 'deleted-dossiers/restore').pipe(switchMap(() => this.loadAll()))); - } - - @Validate() - hardDelete(@RequiredParam() dossierIds: List): Promise { - const body = dossierIds.map(id => ({ key: 'dossierId', value: id })); - return firstValueFrom(super.delete(body, 'deleted-dossiers/hard-delete', body)); - } - - getCountWithState(dossierStatusId: string): number { - return this.all.filter(dossier => dossier.dossierStatusId === dossierStatusId).length; - } - - #removeDossiers(dossiers: Dossier[]): void { - this.setEntities(this.all.filter(dossier => !dossiers.find(d => dossier.id === d.id))); - } - - private _load(id: string, queryParams?: List): Observable { - return super._getOne([id], this._defaultModelPath, queryParams).pipe( - map(entity => new Dossier(entity)), - tap(dossier => this.replace(dossier)), - switchMap(dossier => this._dossierStatsService.getFor([dossier.dossierId])), - ); - } - - #emitFileChanges(dossierChanges: DossierChanges): void { - dossierChanges.filter(change => change.fileChanges).forEach(change => this.dossierFileChanges$.next(change.dossierId)); - } - #computeStats(entities: List): IDossiersStats { let totalAnalyzedPages = 0; const totalPeople = new Set(); diff --git a/apps/red-ui/src/app/services/entity-services/platform-search.service.ts b/apps/red-ui/src/app/services/entity-services/platform-search.service.ts index 000d563c1..c96e31909 100644 --- a/apps/red-ui/src/app/services/entity-services/platform-search.service.ts +++ b/apps/red-ui/src/app/services/entity-services/platform-search.service.ts @@ -3,7 +3,7 @@ import { GenericService } from '@iqser/common-ui'; import { IMatchedDocument, ISearchInput, ISearchRequest, ISearchResponse } from '@red/domain'; import { Observable, of, zip } from 'rxjs'; import { mapTo, switchMap } from 'rxjs/operators'; -import { DossiersService } from './dossiers.service'; +import { ActiveDossiersService } from './active-dossiers.service'; import { FilesMapService } from './files-map.service'; import { FilesService } from './files.service'; @@ -12,7 +12,7 @@ export class PlatformSearchService extends GenericService { constructor( protected readonly _injector: Injector, private readonly _filesService: FilesService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _filesMapService: FilesMapService, ) { super(_injector, 'search-v2'); @@ -38,7 +38,9 @@ export class PlatformSearchService extends GenericService { } private _loadMissingFiles$(searchResponse: ISearchResponse): Observable { - const documentsOfActiveDossiers = searchResponse.matchedDocuments.filter(document => this._dossiersService.has(document.dossierId)); + const documentsOfActiveDossiers = searchResponse.matchedDocuments.filter(document => + this._activeDossiersService.has(document.dossierId), + ); const fileNotLoaded = ({ dossierId, fileId }: IMatchedDocument) => !this._filesMapService.get(dossierId, fileId); const dossiersWithNotLoadedFiles = documentsOfActiveDossiers.filter(fileNotLoaded).map(document => document.dossierId); diff --git a/apps/red-ui/src/app/services/notifications.service.ts b/apps/red-ui/src/app/services/notifications.service.ts index 9d798fcb5..a37192934 100644 --- a/apps/red-ui/src/app/services/notifications.service.ts +++ b/apps/red-ui/src/app/services/notifications.service.ts @@ -7,7 +7,7 @@ import { INotification, Notification, NotificationTypes } from '@red/domain'; import { map, switchMap } from 'rxjs/operators'; import { notificationsTranslations } from '../translations/notifications-translations'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { DossiersService } from '@services/entity-services/dossiers.service'; +import { ActiveDossiersService } from './entity-services/active-dossiers.service'; import { UserService } from '@services/user.service'; import { FilesMapService } from '@services/entity-services/files-map.service'; @@ -18,7 +18,7 @@ export class NotificationsService extends GenericService { constructor( protected readonly _injector: Injector, private readonly _translateService: TranslateService, - private readonly _dossiersService: DossiersService, + private readonly _activeDossiersService: ActiveDossiersService, private readonly _userService: UserService, private readonly _filesMapService: FilesMapService, ) { @@ -67,7 +67,7 @@ export class NotificationsService extends GenericService { private _translate(notification: INotification, translation: string): string { const fileId = notification.target.fileId; const dossierId = notification.target.dossierId; - const dossier = this._dossiersService.find(dossierId); + const dossier = this._activeDossiersService.find(dossierId); const files = this._filesMapService.get(dossierId); const file = files?.find(f => f.fileId === fileId); diff --git a/apps/red-ui/src/app/services/permissions.service.ts b/apps/red-ui/src/app/services/permissions.service.ts index 22912c866..257e618c1 100644 --- a/apps/red-ui/src/app/services/permissions.service.ts +++ b/apps/red-ui/src/app/services/permissions.service.ts @@ -1,13 +1,13 @@ import { Injectable } from '@angular/core'; import { UserService } from './user.service'; import { Dossier, File, IComment, IDossier } from '@red/domain'; -import { DossiersService } from './entity-services/dossiers.service'; +import { ActiveDossiersService } from './entity-services/active-dossiers.service'; @Injectable({ providedIn: 'root', }) export class PermissionsService { - constructor(private readonly _userService: UserService, private readonly _dossiersService: DossiersService) {} + constructor(private readonly _userService: UserService, private readonly _activeDossiersService: ActiveDossiersService) {} isReviewerOrApprover(file: File): boolean { const dossier = this._getDossier(file); @@ -228,6 +228,6 @@ export class PermissionsService { } private _getDossier(file: File): Dossier { - return this._dossiersService.find(file.dossierId); + return this._activeDossiersService.find(file.dossierId); } } diff --git a/apps/red-ui/src/app/tokens.ts b/apps/red-ui/src/app/tokens.ts index ca56f808f..ce8f6a595 100644 --- a/apps/red-ui/src/app/tokens.ts +++ b/apps/red-ui/src/app/tokens.ts @@ -2,3 +2,6 @@ import { InjectionToken } from '@angular/core'; export const BASE_HREF: InjectionToken = new InjectionToken('BASE_HREF'); export const DOSSIER_ID: InjectionToken = new InjectionToken('DOSSIER_ID'); + +export const ACTIVE_DOSSIERS_SERVICE = new InjectionToken('Active dossiers service'); +export const ARCHIVED_DOSSIERS_SERVICE = new InjectionToken('Archived dossiers service');