diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/table-item/table-item.component.html b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/table-item/table-item.component.html
index 646b60adc..41571ae8d 100644
--- a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/table-item/table-item.component.html
+++ b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/table-item/table-item.component.html
@@ -1,19 +1,21 @@
-
-
-
+
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
+
diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/table-item/table-item.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/table-item/table-item.component.ts
index c4700f034..2a8b5bd90 100644
--- a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/table-item/table-item.component.ts
+++ b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/table-item/table-item.component.ts
@@ -1,23 +1,43 @@
import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output } from '@angular/core';
import { Dossier, DossierStats } from '@red/domain';
-import { Required } from '@iqser/common-ui';
import { DossierStatsService } from '@services/entity-services/dossier-stats.service';
+import { BehaviorSubject, merge, Observable, timer } from 'rxjs';
+import { filter, switchMap } from 'rxjs/operators';
+import { CHANGED_CHECK_INTERVAL } from '@iqser/common-ui';
+import { FilesService } from '@services/entity-services/files.service';
@Component({
- selector: 'redaction-table-item',
+ selector: 'redaction-table-item [dossier]',
templateUrl: './table-item.component.html',
styleUrls: ['./table-item.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class TableItemComponent implements OnChanges {
- @Input() @Required() dossier!: Dossier;
+ @Input() dossier!: Dossier;
@Output() readonly calculateData = new EventEmitter();
- stats: DossierStats;
+ readonly stats$: Observable;
+ private readonly _ngOnChanges$ = new BehaviorSubject(undefined);
- constructor(readonly dossierStatsService: DossierStatsService) {}
+ constructor(readonly dossierStatsService: DossierStatsService, readonly filesService: FilesService) {
+ const hasChanges$ = this._hasChanges$;
+ this.stats$ = merge(this._ngOnChanges$, hasChanges$).pipe(
+ filter(() => !!this.dossier),
+ switchMap(() => this.dossierStatsService.watch$(this.dossier.dossierId)),
+ );
+ }
+
+ private get _hasChanges$() {
+ // I used switchMap instead of switchMapTo because I want to check dossierId every time
+ return timer(CHANGED_CHECK_INTERVAL, CHANGED_CHECK_INTERVAL).pipe(
+ filter(() => !!this.dossier),
+ switchMap(() => this.filesService.hasChanges$(this.dossier.dossierId)),
+ filter(changed => changed),
+ switchMap(() => this.dossierStatsService.getFor([this.dossier.dossierId])),
+ );
+ }
ngOnChanges() {
- this.stats = this.dossierStatsService.get(this.dossier.dossierId);
+ this._ngOnChanges$.next(this.dossier.dossierId);
}
}