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); } }