RED-3796: Fixed provider, filter dossiers, initialize add dossier
This commit is contained in:
parent
56765ea81e
commit
81311dbdb4
@ -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<Dossier> 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() {
|
||||
|
||||
@ -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<void> {
|
||||
await this.dossierTemplateChanged(this.form.get('dossierTemplateId').value);
|
||||
}
|
||||
|
||||
reportTemplateValueMapper = (reportTemplate: IReportTemplate) => reportTemplate.templateId;
|
||||
|
||||
async save(options?: SaveOptions) {
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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[] {
|
||||
|
||||
@ -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<Dossier> 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<unknown>;
|
||||
@ViewChild(TableComponent) private readonly _tableComponent: TableComponent<Dossier>;
|
||||
private readonly _dossierTemplateId: string;
|
||||
|
||||
constructor(
|
||||
protected readonly _injector: Injector,
|
||||
@ -44,7 +42,9 @@ export class DossiersListingScreenComponent extends ListingComponent<Dossier> 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<Dossier> 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 {
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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>(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],
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user