diff --git a/apps/red-ui/src/app/modules/archive/screens/archived-dossiers-screen/archived-dossiers-screen.component.ts b/apps/red-ui/src/app/modules/archive/screens/archived-dossiers-screen/archived-dossiers-screen.component.ts index 2efab9ccc..f535c5b58 100644 --- a/apps/red-ui/src/app/modules/archive/screens/archived-dossiers-screen/archived-dossiers-screen.component.ts +++ b/apps/red-ui/src/app/modules/archive/screens/archived-dossiers-screen/archived-dossiers-screen.component.ts @@ -1,32 +1,45 @@ import { ChangeDetectionStrategy, Component, forwardRef, Injector, OnInit } from '@angular/core'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { DefaultListingServicesTmp, EntitiesService, ListingComponent } from '@iqser/common-ui'; -import { ArchivedDossiersService } from '@services/dossiers/archived-dossiers.service'; +import { DefaultListingServices, ListingComponent } from '@iqser/common-ui'; import { Dossier } from '@red/domain'; import { ConfigService } from '../../services/config.service'; import { tap } from 'rxjs/operators'; +import { ArchivedDossiersService } from '@services/dossiers/archived-dossiers.service'; +import { DOSSIER_TEMPLATE_ID } from '@utils/constants'; +import { Router } from '@angular/router'; @Component({ selector: 'redaction-archived-dossiers-screen', templateUrl: './archived-dossiers-screen.component.html', styleUrls: ['./archived-dossiers-screen.component.scss'], - providers: [ - ...DefaultListingServicesTmp, - { provide: EntitiesService, useExisting: ArchivedDossiersService }, - { provide: ListingComponent, useExisting: forwardRef(() => ArchivedDossiersScreenComponent) }, - ], + providers: [...DefaultListingServices, { provide: ListingComponent, useExisting: forwardRef(() => ArchivedDossiersScreenComponent) }], changeDetection: ChangeDetectionStrategy.OnPush, }) export class ArchivedDossiersScreenComponent extends ListingComponent implements OnInit { readonly tableColumnConfigs = this._configService.tableConfig; readonly tableHeaderLabel = _('archived-dossiers-listing.table-header.title'); + private readonly _dossierTemplateId: string; - constructor(protected readonly _injector: Injector, private readonly _configService: ConfigService) { + constructor( + protected readonly _injector: Injector, + private readonly _configService: ConfigService, + private readonly _archivedDossiersService: ArchivedDossiersService, + private readonly _router: Router, + ) { super(_injector); + this._dossierTemplateId = this._router.routerState.snapshot.root.firstChild.firstChild.paramMap.get(DOSSIER_TEMPLATE_ID); + this._router.routeReuseStrategy.shouldReuseRoute = () => false; + console.log(this._dossierTemplateId); } ngOnInit(): void { this.addSubscription = this.entitiesService.all$.pipe(tap(() => this._computeAllFilters())).subscribe(); + this.addSubscription = this._archivedDossiersService.all$ + .pipe( + tap(dossiers => console.log(dossiers.map(d => d.dossierTemplateId))), + tap(dossiers => this.entitiesService.setEntities(dossiers.filter(d => d.dossierTemplateId === this._dossierTemplateId))), + ) + .subscribe(); } private _computeAllFilters() { 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 b6be00297..c8d84feeb 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 @@ -1,4 +1,4 @@ -import { Component, Inject, Injector } from '@angular/core'; +import { Component, Inject, Injector, OnInit } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { DownloadFileType, IDossierRequest, IDossierTemplate, IReportTemplate } from '@red/domain'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; @@ -21,7 +21,7 @@ interface DialogData { templateUrl: './add-dossier-dialog.component.html', styleUrls: ['./add-dossier-dialog.component.scss'], }) -export class AddDossierDialogComponent extends BaseDialogComponent { +export class AddDossierDialogComponent extends BaseDialogComponent implements OnInit { readonly iconButtonTypes = IconButtonTypes; hasDueDate = false; @@ -68,6 +68,10 @@ export class AddDossierDialogComponent extends BaseDialogComponent { return this.form.invalid; } + async ngOnInit(): Promise { + await this.dossierTemplateChanged(this.form.get('dossierTemplateId').value); + } + reportTemplateValueMapper = (reportTemplate: IReportTemplate) => reportTemplate.templateId; async save(options?: SaveOptions) { 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 a723bc52d..ed5407b64 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 @@ -1,4 +1,4 @@ -import { AfterViewInit, ChangeDetectorRef, Component, Inject, Injector, ViewChild } from '@angular/core'; +import { AfterViewInit, Component, Inject, Injector, ViewChild } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { Dossier } from '@red/domain'; import { EditDossierGeneralInfoComponent } from './general-info/edit-dossier-general-info.component'; @@ -48,8 +48,7 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A constructor( private readonly _toaster: Toaster, - private readonly _activeDossiersService: DossiersService, - private readonly _changeRef: ChangeDetectorRef, + private readonly _dossiersService: DossiersService, private readonly _loadingService: LoadingService, private readonly _permissionsService: PermissionsService, private readonly _userService: UserService, @@ -62,7 +61,7 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A }, ) { super(_injector, _dialogRef, true); - this.dossier$ = this._activeDossiersService.getEntityChanged$(_data.dossierId).pipe( + this.dossier$ = this._dossiersService.getEntityChanged$(_data.dossierId).pipe( tap(dossier => { this._dossier = dossier; this._initializeNavItems(); diff --git a/apps/red-ui/src/app/modules/dossiers-listing/config.service.ts b/apps/red-ui/src/app/modules/dossiers-listing/config.service.ts index 2f19f3467..f57e33fe0 100644 --- a/apps/red-ui/src/app/modules/dossiers-listing/config.service.ts +++ b/apps/red-ui/src/app/modules/dossiers-listing/config.service.ts @@ -38,11 +38,11 @@ export class ConfigService { return this._userService.currentUser; } - get buttonsConfig(): ButtonConfig[] { + buttonsConfig(dossierTemplateId: string): ButtonConfig[] { return [ { label: _('dossier-listing.add-new'), - action: () => this._openAddDossierDialog(), + action: () => this._openAddDossierDialog(dossierTemplateId), hide: !this._currentUser.isManager, icon: 'iqser:plus', type: 'primary', @@ -189,8 +189,8 @@ export class ConfigService { private _otherChecker = (dw: Dossier) => !dw.memberIds.includes(this._currentUser.id); - private _openAddDossierDialog(): void { - this._dialogService.openDialog('addDossier', null, null); + private _openAddDossierDialog(dossierTemplateId: string): void { + this._dialogService.openDialog('addDossier', null, { dossierTemplateId }); } private _quickFilters(entities: Dossier[]): NestedFilter[] { diff --git a/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.ts b/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.ts index 0b7b59ea3..fe52199c6 100644 --- a/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossiers-listing/screen/dossiers-listing-screen.component.ts @@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, Component, forwardRef, Injector, OnInit, Templ import { Dossier } from '@red/domain'; import { UserService } from '@services/user.service'; import { PermissionsService } from '@services/permissions.service'; -import { DefaultListingServicesTmp, EntitiesService, ListingComponent, OnAttach, TableComponent } from '@iqser/common-ui'; +import { ButtonConfig, DefaultListingServices, ListingComponent, OnAttach, TableComponent } from '@iqser/common-ui'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { ConfigService } from '../config.service'; import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; @@ -10,28 +10,26 @@ import { DossierTemplatesService } from '@services/dossier-templates/dossier-tem import { tap } from 'rxjs/operators'; import { DossiersDialogService } from '../../dossier/shared/services/dossiers-dialog.service'; import { Router } from '@angular/router'; +import { DOSSIER_TEMPLATE_ID } from '@utils/constants'; @Component({ templateUrl: './dossiers-listing-screen.component.html', styleUrls: ['./dossiers-listing-screen.component.scss'], - providers: [ - ...DefaultListingServicesTmp, - { provide: EntitiesService, useExisting: ActiveDossiersService }, - { provide: ListingComponent, useExisting: forwardRef(() => DossiersListingScreenComponent) }, - ], + providers: [...DefaultListingServices, { provide: ListingComponent, useExisting: forwardRef(() => DossiersListingScreenComponent) }], changeDetection: ChangeDetectionStrategy.OnPush, }) export class DossiersListingScreenComponent extends ListingComponent implements OnInit, OnAttach { readonly currentUser = this._userService.currentUser; readonly tableColumnConfigs = this._configService.tableConfig; readonly tableHeaderLabel = _('dossier-listing.table-header.title'); - readonly buttonConfigs = this._configService.buttonsConfig; + readonly buttonConfigs: ButtonConfig[]; @ViewChild('needsWorkFilterTemplate', { read: TemplateRef, static: true, }) private readonly _needsWorkFilterTemplate: TemplateRef; @ViewChild(TableComponent) private readonly _tableComponent: TableComponent; + private readonly _dossierTemplateId: string; constructor( protected readonly _injector: Injector, @@ -44,7 +42,9 @@ export class DossiersListingScreenComponent extends ListingComponent im private readonly _router: Router, ) { super(_injector); + this._dossierTemplateId = this._router.routerState.snapshot.root.firstChild.firstChild.paramMap.get(DOSSIER_TEMPLATE_ID); this._router.routeReuseStrategy.shouldReuseRoute = () => false; + this.buttonConfigs = this._configService.buttonsConfig(this._dossierTemplateId); } get defaultDossierTemplateId(): string { @@ -52,11 +52,14 @@ export class DossiersListingScreenComponent extends ListingComponent im } openAddDossierDialog(): void { - this._dialogService.openDialog('addDossier', null, null); + this._dialogService.openDialog('addDossier', null, { dossierTemplateId: this._dossierTemplateId }); } ngOnInit(): void { - this.addSubscription = this._activeDossiersService.all$.pipe(tap(() => this._computeAllFilters())).subscribe(); + this.addSubscription = this.entitiesService.all$.pipe(tap(() => this._computeAllFilters())).subscribe(); + this.addSubscription = this._activeDossiersService.all$ + .pipe(tap(dossiers => this.entitiesService.setEntities(dossiers.filter(d => d.dossierTemplateId === this._dossierTemplateId)))) + .subscribe(); } ngOnAttach(): void { diff --git a/apps/red-ui/src/app/modules/file-preview/services/file-preview-state.service.ts b/apps/red-ui/src/app/modules/file-preview/services/file-preview-state.service.ts index ddf8ac2e2..5ce48cb69 100644 --- a/apps/red-ui/src/app/modules/file-preview/services/file-preview-state.service.ts +++ b/apps/red-ui/src/app/modules/file-preview/services/file-preview-state.service.ts @@ -1,7 +1,7 @@ import { Injectable, Injector } from '@angular/core'; import { combineLatest, firstValueFrom, from, merge, Observable, of, pairwise, Subject, switchMap } from 'rxjs'; import { Dossier, File } from '@red/domain'; -import { ActivatedRoute } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { FilesMapService } from '@services/entity-services/files-map.service'; import { PermissionsService } from '@services/permissions.service'; import { boolFactory } from '@iqser/common-ui'; @@ -39,8 +39,9 @@ export class FilePreviewStateService { private readonly _filesService: FilesService, private readonly _dossiersService: DossiersService, private readonly _fileManagementService: FileManagementService, + private readonly _router: Router, ) { - const dossiersService = dossiersServiceResolver(_injector); + const dossiersService = dossiersServiceResolver(_injector, _router); this.fileId = route.snapshot.paramMap.get(FILE_ID); this.dossierId = route.snapshot.paramMap.get(DOSSIER_ID); diff --git a/apps/red-ui/src/app/services/breadcrumbs.service.ts b/apps/red-ui/src/app/services/breadcrumbs.service.ts index ce911d9a0..fb0c23760 100644 --- a/apps/red-ui/src/app/services/breadcrumbs.service.ts +++ b/apps/red-ui/src/app/services/breadcrumbs.service.ts @@ -58,7 +58,7 @@ export class BreadcrumbsService { } private get _dossiersService(): DossiersService { - return dossiersServiceResolver(this._injector, this._router.routerState.root); + return dossiersServiceResolver(this._injector, this._router); } private get _dashboardBreadcrumb(): Breadcrumb { diff --git a/apps/red-ui/src/app/services/entity-services/dossiers.service.provider.ts b/apps/red-ui/src/app/services/entity-services/dossiers.service.provider.ts index bd30faa3f..ddc69712a 100644 --- a/apps/red-ui/src/app/services/entity-services/dossiers.service.provider.ts +++ b/apps/red-ui/src/app/services/entity-services/dossiers.service.provider.ts @@ -1,11 +1,11 @@ -import { ActivatedRoute } from '@angular/router'; +import { Router } from '@angular/router'; import { Injector, ProviderToken } from '@angular/core'; import { DossiersService } from '../dossiers/dossiers.service'; /** Usage in components or services is only allowed in guards or in constructors. * Otherwise, it causes errors on navigation to other screens if the component is reused. */ -export const dossiersServiceResolver = (injector: Injector, _route?: ActivatedRoute) => { - let route: ActivatedRoute = _route || injector.get(ActivatedRoute); +export const dossiersServiceResolver = (injector: Injector, router: Router) => { + let route = router.routerState.root; while (route.firstChild) { route = route.firstChild; } @@ -16,5 +16,5 @@ export const dossiersServiceResolver = (injector: Injector, _route?: ActivatedRo export const dossiersServiceProvider = { provide: DossiersService, useFactory: dossiersServiceResolver, - deps: [Injector], + deps: [Injector, Router], };