Deleted dossier stats

This commit is contained in:
Adina Țeudan 2022-03-15 19:31:56 +02:00
parent 7e93e2f0f2
commit d854c12b84
8 changed files with 32 additions and 32 deletions

View File

@ -7,25 +7,11 @@
[file]="file"
></redaction-file-name-column>
<ng-container *ngIf="item.isDossier && dossier(item) as dossier">
<div [matTooltip]="dossier.name" class="table-item-title heading" matTooltipPosition="above">
{{ dossier.name }}
</div>
<div class="small-label stats-subtitle">
<div>
<mat-icon svgIcon="red:user"></mat-icon>
{{ dossier.memberIds.length }}
</div>
<div>
<mat-icon svgIcon="red:calendar"></mat-icon>
{{ dossier.date | date: 'mediumDate' }}
</div>
<div *ngIf="dossier.dueDate">
<mat-icon svgIcon="red:lightning"></mat-icon>
{{ dossier.dueDate | date: 'mediumDate' }}
</div>
</div>
</ng-container>
<redaction-dossier-name-column
*ngIf="item.isDossier"
[dossierStats]="dossierStats$ | async"
[dossier]="dossier(item)"
></redaction-dossier-name-column>
</div>
</div>
@ -34,9 +20,9 @@
</div>
<div class="cell">
<span *ngIf="item.isFile" [routerLink]="fileDossier.routerLink" class="small-label link-action">
<a *ngIf="item.isFile && fileDossier$ | async as fileDossier" [routerLink]="fileDossier.routerLink" class="small-label link-action">
{{ fileDossier.dossierName }}
</span>
</a>
<span *ngIf="item.isDossier" class="small-label">-</span>
</div>

View File

@ -1,7 +1,9 @@
import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output } from '@angular/core';
import { Dossier, TrashDossier, TrashFile, TrashItem } from '@red/domain';
import { Dossier, DossierStats, TrashDossier, TrashFile, TrashItem } from '@red/domain';
import { CircleButtonTypes } from '@iqser/common-ui';
import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service';
import { Observable } from 'rxjs';
import { DossierStatsService } from '@services/dossiers/dossier-stats.service';
@Component({
selector: 'redaction-trash-table-item [item]',
@ -15,9 +17,10 @@ export class TrashTableItemComponent implements OnChanges {
@Input() item: TrashItem;
@Output() restore = new EventEmitter<TrashItem[]>();
@Output() hardDelete = new EventEmitter<TrashItem[]>();
fileDossier: Dossier;
fileDossier$: Observable<Dossier>;
dossierStats$: Observable<DossierStats>;
constructor(private readonly _activeDossiersService: ActiveDossiersService) {}
constructor(private readonly _activeDossiersService: ActiveDossiersService, readonly dossierStatsService: DossierStatsService) {}
file(item: TrashItem): TrashFile {
return item as TrashFile;
@ -28,6 +31,11 @@ export class TrashTableItemComponent implements OnChanges {
}
ngOnChanges(): void {
this.fileDossier = this._activeDossiersService.find(this.dossier(this.item).dossierId);
if (this.item.isFile) {
this.fileDossier$ = this._activeDossiersService.getEntityChanged$(this.file(this.item).dossierId);
}
if (this.item.isDossier) {
this.dossierStats$ = this.dossierStatsService.watch$(this.dossier(this.item).id);
}
}
}

View File

@ -12,10 +12,10 @@
<div *ngIf="dossierStats" class="stats-subtitle">
<div class="small-label">
<mat-icon svgIcon="iqser:document"></mat-icon>
{{ dossierStats.numberOfFiles }}
{{ dossier.isSoftDeleted ? dossierStats.numberOfSoftDeletedFiles : dossierStats.numberOfFiles }}
</div>
<div class="small-label">
<div *ngIf="!dossier.isSoftDeleted" class="small-label">
<mat-icon svgIcon="iqser:pages"></mat-icon>
{{ dossierStats.numberOfPages }}
</div>

View File

@ -1,17 +1,18 @@
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
import { DossierStats } from '@red/domain';
import { Dossier, DossierStats } from '@red/domain';
import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service';
import * as moment from 'moment';
import { List } from '@iqser/common-ui';
const DUE_DATE_WARN_DAYS = 14;
interface PartialDossier {
interface PartialDossier extends Partial<Dossier> {
readonly dossierName: string;
readonly dossierTemplateId: string;
readonly dueDate?: string;
readonly date?: string;
readonly memberIds: List;
readonly isSoftDeleted: boolean;
}
@Component({

View File

@ -73,8 +73,7 @@ export class TrashService extends GenericService<TrashItem> {
this._permissionsService.canDeleteDossier(dossier),
),
),
// TODO: API to include deleted dossiers
// switchMap(dossiers => this._dossierStatsService.getFor(dossiers.map(d => d.id)).pipe(mapTo(dossiers))),
switchMap(dossiers => this._dossierStatsService.getFor(dossiers.map(d => d.id) as string[]).pipe(map(() => dossiers))),
);
}

@ -1 +1 @@
Subproject commit a6c4093d3553c4d0f95e496678e2a8f1cab0b9de
Subproject commit 8a992aa440ff24d1244e24edea3ce75fdadbebd5

View File

@ -64,6 +64,10 @@ export class Dossier implements IDossier, IListable, IRouterPath {
return this.status === DossierStatuses.ACTIVE;
}
get isSoftDeleted(): boolean {
return this.status === DossierStatuses.DELETED;
}
hasMember(memberId: string): boolean {
return !!this.memberIds && this.memberIds.indexOf(memberId) >= 0;
}

View File

@ -6,6 +6,8 @@ export class TrashDossier extends TrashItem {
readonly type = 'dossier';
readonly icon = 'red:folder';
readonly isSoftDeleted = true;
readonly dossierId: string;
readonly dossierTemplateId: string;
readonly dossierName: string;