Prepare for dossier changes check
This commit is contained in:
parent
f86f75953e
commit
3afaedd878
@ -34,7 +34,7 @@ import { PdfViewerUtils } from '../../utils/pdf-viewer.utils';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { ActivatedRoute } from '@angular/router';
|
||||
import { toPosition } from '../../utils/pdf-calculation.utils';
|
||||
import { DossiersService } from '../../../../services/entity-services/dossiers.service';
|
||||
import { DossiersService } from '@services/entity-services/dossiers.service';
|
||||
import Tools = Core.Tools;
|
||||
import TextTool = Tools.TextTool;
|
||||
import Annotation = Core.Annotations.Annotation;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { Component, Input, OnChanges } from '@angular/core';
|
||||
import { AnnotationWrapper } from '@models/file/annotation.wrapper';
|
||||
import { AppStateService } from '@state/app-state.service';
|
||||
import { DossiersService } from '../../../../services/entity-services/dossiers.service';
|
||||
import { DossiersService } from '@services/entity-services/dossiers.service';
|
||||
import { File } from '@red/domain';
|
||||
|
||||
@Component({
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
||||
import { AppStateService } from '@state/app-state.service';
|
||||
import { File } from '@red/domain';
|
||||
import { DossiersService } from '../../../../../../../services/entity-services/dossiers.service';
|
||||
import { DossiersService } from '@services/entity-services/dossiers.service';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-file-workload-column',
|
||||
|
||||
@ -12,7 +12,8 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { ConfigService } from '../config.service';
|
||||
import { DossiersService } from '@services/entity-services/dossiers.service';
|
||||
import { FilesService } from '@services/entity-services/files.service';
|
||||
import { DossierTemplatesService } from '../../../../../services/entity-services/dossier-templates.service';
|
||||
import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service';
|
||||
import { switchMap, tap } from 'rxjs/operators';
|
||||
|
||||
@Component({
|
||||
templateUrl: './dossiers-listing-screen.component.html',
|
||||
@ -59,10 +60,12 @@ export class DossiersListingScreenComponent extends ListingComponent<Dossier> im
|
||||
ngOnInit(): void {
|
||||
this.computeAllFilters();
|
||||
|
||||
this.addSubscription = timer(0, 20000).subscribe(async () => {
|
||||
await this._dossiersService.loadAll().toPromise();
|
||||
this.computeAllFilters();
|
||||
});
|
||||
this.addSubscription = timer(20000, 20000)
|
||||
.pipe(
|
||||
switchMap(() => this._dossiersService.loadAll()),
|
||||
tap(() => this.computeAllFilters()),
|
||||
)
|
||||
.subscribe();
|
||||
}
|
||||
|
||||
ngOnAttach(): void {
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { Injectable, Injector } from '@angular/core';
|
||||
import { EntitiesService, List, mapEach, QueryParam, RequiredParam, shareLast, Toaster, Validate } from '@iqser/common-ui';
|
||||
import { EntitiesService, List, QueryParam, RequiredParam, shareLast, Toaster, Validate } from '@iqser/common-ui';
|
||||
import { Dossier, IDossier, IDossierRequest } from '@red/domain';
|
||||
import { catchError, filter, map, switchMap, tap, withLatestFrom } from 'rxjs/operators';
|
||||
import { combineLatest, Observable, of, throwError } from 'rxjs';
|
||||
import { catchError, filter, map, mapTo, switchMap, tap } from 'rxjs/operators';
|
||||
import { combineLatest, iif, Observable, of, throwError } from 'rxjs';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { HttpErrorResponse } from '@angular/common/http';
|
||||
import { DossierStatsService } from '@services/entity-services/dossier-stats.service';
|
||||
@ -20,6 +20,7 @@ const GENERIC_MGS = _('add-dossier-dialog.errors.generic');
|
||||
})
|
||||
export class DossiersService extends EntitiesService<Dossier, IDossier> {
|
||||
readonly generalStats$ = this.all$.pipe(switchMap(entities => this._generalStats$(entities)));
|
||||
private _lastCheckedForChanges = '0';
|
||||
|
||||
constructor(
|
||||
private readonly _toaster: Toaster,
|
||||
@ -29,18 +30,25 @@ export class DossiersService extends EntitiesService<Dossier, IDossier> {
|
||||
super(_injector, Dossier, 'dossier');
|
||||
}
|
||||
|
||||
loadAll(modelPath: string = this._defaultModelPath, queryParams?: List<QueryParam>): Observable<Dossier[]> {
|
||||
const req$ = super.loadAll(modelPath, queryParams).pipe(shareLast());
|
||||
const getStats$ = req$.pipe(
|
||||
mapEach(dossier => dossier.dossierId),
|
||||
switchMap(ids => this._dossierStatsService.getFor(ids)),
|
||||
private get _hasChanges$(): Observable<boolean> {
|
||||
return this._post<{ value: boolean }>({ since: this._lastCheckedForChanges }, `${this._defaultModelPath}/changes`).pipe(
|
||||
map(res => res.value),
|
||||
tap(() => this._updateLastChanged()),
|
||||
);
|
||||
return getStats$.pipe(
|
||||
withLatestFrom(req$),
|
||||
map(([, dossiers]) => dossiers),
|
||||
}
|
||||
|
||||
loadAll(): Observable<Dossier[]> {
|
||||
const dossierIds = (dossiers: Dossier[]) => dossiers.map(d => d.dossierId);
|
||||
return super.loadAll().pipe(
|
||||
tap(() => this._updateLastChanged()),
|
||||
switchMap(dossiers => this._dossierStatsService.getFor(dossierIds(dossiers)).pipe(mapTo(dossiers))),
|
||||
);
|
||||
}
|
||||
|
||||
loadAllIfChanged(): Observable<boolean> {
|
||||
return this._hasChanges$.pipe(switchMap(changed => iif(() => changed, this.loadAll()).pipe(mapTo(changed))));
|
||||
}
|
||||
|
||||
@Validate()
|
||||
createOrUpdate(@RequiredParam() dossier: IDossierRequest): Observable<Dossier | undefined> {
|
||||
const showToast = (error: HttpErrorResponse) => {
|
||||
@ -48,12 +56,8 @@ export class DossiersService extends EntitiesService<Dossier, IDossier> {
|
||||
return throwError(error);
|
||||
};
|
||||
|
||||
const dossier$ = this._post(dossier).pipe(shareLast());
|
||||
const stats$ = dossier$.pipe(switchMap(updatedDossier => this._dossierStatsService.getFor([updatedDossier.dossierId])));
|
||||
|
||||
return combineLatest([dossier$, stats$]).pipe(
|
||||
map(([updatedDossier]) => new Dossier(updatedDossier)),
|
||||
tap(newDossier => this.replace([newDossier])),
|
||||
return this._post(dossier).pipe(
|
||||
switchMap(newDossier => this.loadAll().pipe(map(() => this.find(newDossier.dossierId)))),
|
||||
catchError(showToast),
|
||||
);
|
||||
}
|
||||
@ -84,6 +88,10 @@ export class DossiersService extends EntitiesService<Dossier, IDossier> {
|
||||
return super.delete(body, 'deleted-dossiers/hard-delete', body).toPromise();
|
||||
}
|
||||
|
||||
private _updateLastChanged(): void {
|
||||
this._lastCheckedForChanges = new Date().toISOString();
|
||||
}
|
||||
|
||||
private _computeStats(entities: List<Dossier>): IDossiersStats {
|
||||
let totalAnalyzedPages = 0;
|
||||
const totalPeople = new Set<string>();
|
||||
|
||||
@ -31,7 +31,7 @@ export class AppStateGuard implements CanActivate {
|
||||
}
|
||||
|
||||
if (this._userService.currentUser.isUser) {
|
||||
await this._dossiersService.loadAllIfEmpty();
|
||||
await this._dossiersService.loadAll().toPromise();
|
||||
}
|
||||
|
||||
const { dossierId, fileId, dossierTemplateId, type } = route.params;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user