RED-2994: Adjust 'Deleted documents' tab in 'Edit Dossier'
This commit is contained in:
parent
a3b6d683a0
commit
f0767204fc
@ -60,7 +60,6 @@
|
||||
*ngIf="form.get('userId').value !== ALL_USERS"
|
||||
[user]="form.get('userId').value"
|
||||
[withName]="true"
|
||||
size="small"
|
||||
></redaction-initials-avatar>
|
||||
<div *ngIf="form.get('userId').value === ALL_USERS" [translate]="ALL_USERS"></div>
|
||||
</mat-select-trigger>
|
||||
@ -69,7 +68,6 @@
|
||||
*ngIf="userId !== ALL_USERS"
|
||||
[user]="userId"
|
||||
[withName]="true"
|
||||
size="small"
|
||||
></redaction-initials-avatar>
|
||||
<div *ngIf="userId === ALL_USERS" [translate]="ALL_USERS"></div>
|
||||
</mat-option>
|
||||
@ -109,7 +107,7 @@
|
||||
</div>
|
||||
|
||||
<div class="user-column cell">
|
||||
<redaction-initials-avatar [user]="log.userId" [withName]="true" size="small"></redaction-initials-avatar>
|
||||
<redaction-initials-avatar [user]="log.userId" [withName]="true"></redaction-initials-avatar>
|
||||
</div>
|
||||
|
||||
<div [translate]="translations[log.category]" class="cell"></div>
|
||||
|
||||
@ -28,7 +28,7 @@
|
||||
|
||||
<iqser-circle-button
|
||||
(action)="hardDelete()"
|
||||
*ngIf="listingService.areSomeSelected$ | async"
|
||||
*ngIf="canDeleteSelected$ | async"
|
||||
[tooltip]="'edit-dossier-dialog.deleted-documents.bulk.delete' | translate"
|
||||
[type]="circleButtonTypes.dark"
|
||||
icon="iqser:trash"
|
||||
@ -48,6 +48,24 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="cell user-column">
|
||||
<redaction-initials-avatar [user]="file.assignee" [withName]="true"></redaction-initials-avatar>
|
||||
</div>
|
||||
|
||||
<div class="cell">
|
||||
<iqser-status-bar
|
||||
[configs]="[
|
||||
{
|
||||
color: file.workflowStatus,
|
||||
label: fileStatusTranslations[file.workflowStatus] | translate,
|
||||
length: 1,
|
||||
cssClass: 'all-caps-label'
|
||||
}
|
||||
]"
|
||||
[small]="true"
|
||||
></iqser-status-bar>
|
||||
</div>
|
||||
|
||||
<div class="cell">
|
||||
<span class="small-label">{{ file.softDeleted | date: 'exactDate' }}</span>
|
||||
</div>
|
||||
@ -65,6 +83,7 @@
|
||||
|
||||
<iqser-circle-button
|
||||
(action)="hardDelete([file])"
|
||||
*ngIf="file.canHardDelete"
|
||||
[tooltip]="'edit-dossier-dialog.deleted-documents.action.delete' | translate"
|
||||
[type]="circleButtonTypes.dark"
|
||||
icon="iqser:trash"
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { Component, forwardRef, Injector, Input, OnInit } from '@angular/core';
|
||||
import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-dossier-section.interface';
|
||||
import { Dossier, IFile } from '@red/domain';
|
||||
import { Dossier, File, IFile } from '@red/domain';
|
||||
import {
|
||||
CircleButtonTypes,
|
||||
ConfirmationDialogInput,
|
||||
@ -21,8 +21,12 @@ import { distinctUntilChanged, map } from 'rxjs/operators';
|
||||
import { DossiersDialogService } from '../../../services/dossiers-dialog.service';
|
||||
import { FilesService } from '@services/entity-services/files.service';
|
||||
import { FileManagementService } from '@services/entity-services/file-management.service';
|
||||
import { workflowFileStatusTranslations } from '../../../translations/file-status-translations';
|
||||
import { PermissionsService } from '@services/permissions.service';
|
||||
import { UserService } from '@services/user.service';
|
||||
|
||||
interface FileListItem extends IFile, IListable {
|
||||
readonly canHardDelete: boolean;
|
||||
readonly canRestore: boolean;
|
||||
readonly restoreDate: string;
|
||||
}
|
||||
@ -37,14 +41,18 @@ interface FileListItem extends IFile, IListable {
|
||||
],
|
||||
})
|
||||
export class EditDossierDeletedDocumentsComponent extends ListingComponent<FileListItem> implements EditDossierSectionInterface, OnInit {
|
||||
readonly fileStatusTranslations = workflowFileStatusTranslations;
|
||||
@Input() dossier: Dossier;
|
||||
readonly changed = false;
|
||||
readonly valid = false;
|
||||
readonly canRestoreSelected$ = this._canRestoreSelected$;
|
||||
readonly canDeleteSelected$ = this._canDeleteSelected$;
|
||||
disabled: boolean;
|
||||
readonly tableColumnConfigs: TableColumnConfig<FileListItem>[] = [
|
||||
{ label: _('edit-dossier-dialog.deleted-documents.table-col-names.name'), width: '3fr' },
|
||||
{ label: _('edit-dossier-dialog.deleted-documents.table-col-names.pages') },
|
||||
{ label: _('edit-dossier-dialog.deleted-documents.table-col-names.assignee'), class: 'user-column' },
|
||||
{ label: _('edit-dossier-dialog.deleted-documents.table-col-names.status') },
|
||||
{ label: _('edit-dossier-dialog.deleted-documents.table-col-names.deleted-on'), sortByKey: 'softDeleted', width: '2fr' },
|
||||
{ label: _('edit-dossier-dialog.deleted-documents.table-col-names.time-to-restore'), sortByKey: 'softDeleted', width: '2fr' },
|
||||
];
|
||||
@ -59,6 +67,8 @@ export class EditDossierDeletedDocumentsComponent extends ListingComponent<FileL
|
||||
private readonly _loadingService: LoadingService,
|
||||
private readonly _configService: ConfigService,
|
||||
private readonly _dialogService: DossiersDialogService,
|
||||
private readonly _permissionsService: PermissionsService,
|
||||
private readonly _userService: UserService,
|
||||
) {
|
||||
super(_injector);
|
||||
}
|
||||
@ -70,6 +80,13 @@ export class EditDossierDeletedDocumentsComponent extends ListingComponent<FileL
|
||||
);
|
||||
}
|
||||
|
||||
private get _canDeleteSelected$(): Observable<boolean> {
|
||||
return this.listingService.selectedEntities$.pipe(
|
||||
map(entities => entities.length && !entities.find(file => !file.canHardDelete)),
|
||||
distinctUntilChanged(),
|
||||
);
|
||||
}
|
||||
|
||||
hardDelete(files = this.listingService.selected) {
|
||||
const data = new ConfirmationDialogInput({
|
||||
title: _('confirmation-dialog.permanently-delete-file.title'),
|
||||
@ -133,21 +150,26 @@ export class EditDossierDeletedDocumentsComponent extends ListingComponent<FileL
|
||||
return files.map(file => this._toListItem(file));
|
||||
}
|
||||
|
||||
private _toListItem(file: IFile): FileListItem {
|
||||
const restoreDate = this._getRestoreDate(file.softDeleted);
|
||||
private _toListItem(_file: IFile): FileListItem {
|
||||
const file = new File(_file, this._userService.getNameForId(_file.assignee));
|
||||
const restoreDate = this._getRestoreDate(_file.softDeleted);
|
||||
return {
|
||||
id: file.fileId,
|
||||
...file,
|
||||
restoreDate,
|
||||
searchKey: file.filename,
|
||||
canRestore: this._canRestoreFile(restoreDate),
|
||||
canRestore: this._canRestore(file, restoreDate),
|
||||
canHardDelete: this._canPerformActions(file),
|
||||
};
|
||||
}
|
||||
|
||||
private _canRestoreFile(restoreDate: string): boolean {
|
||||
const { daysLeft, hoursLeft, minutesLeft } = getLeftDateTime(restoreDate);
|
||||
private _canPerformActions(file: File): boolean {
|
||||
return this._userService.currentUser.isManager || this._permissionsService.canDeleteFile(file);
|
||||
}
|
||||
|
||||
return daysLeft >= 0 && hoursLeft >= 0 && minutesLeft >= 0;
|
||||
private _canRestore(file: File, restoreDate: string): boolean {
|
||||
const { daysLeft, hoursLeft, minutesLeft } = getLeftDateTime(restoreDate);
|
||||
return this._canPerformActions(file) && daysLeft + hoursLeft + minutesLeft > 0;
|
||||
}
|
||||
|
||||
private _getRestoreDate(softDeletedTime: string): string {
|
||||
|
||||
@ -28,5 +28,5 @@
|
||||
</div>
|
||||
|
||||
<ng-template #avatar let-userId="userId">
|
||||
<redaction-initials-avatar [user]="userId" [withName]="true" color="gray" size="small"></redaction-initials-avatar>
|
||||
<redaction-initials-avatar [user]="userId" [withName]="true" color="gray"></redaction-initials-avatar>
|
||||
</ng-template>
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
<button [class.overlay]="showDot" mat-button>
|
||||
<redaction-initials-avatar [user]="userService.currentUser$ | async" [withName]="true" size="small"></redaction-initials-avatar>
|
||||
<redaction-initials-avatar [user]="userService.currentUser$ | async" [withName]="true"></redaction-initials-avatar>
|
||||
<mat-icon svgIcon="iqser:arrow-down"></mat-icon>
|
||||
</button>
|
||||
<div *ngIf="showDot" class="dot"></div>
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
>
|
||||
{{ _user | name: { showInitials: true } }}
|
||||
</div>
|
||||
<div *ngIf="withName" [class.disabled]="disabled" class="clamp-2 username">
|
||||
<div *ngIf="withName" [class.disabled]="disabled" class="clamp-1 username">
|
||||
{{ userName }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -875,9 +875,11 @@
|
||||
"title": "There are no deleted documents."
|
||||
},
|
||||
"table-col-names": {
|
||||
"assignee": "Assignee",
|
||||
"deleted-on": "Deleted On",
|
||||
"name": "Name",
|
||||
"pages": "Pages",
|
||||
"status": "Status",
|
||||
"time-to-restore": "Time To Restore"
|
||||
},
|
||||
"table-header": {
|
||||
|
||||
@ -1 +1 @@
|
||||
Subproject commit 0610684e8fb963fab1f7dd51fd850a7b47287fca
|
||||
Subproject commit 3d7d8d3d28a682cd26df7af4e6c1bbc90f640521
|
||||
Loading…
x
Reference in New Issue
Block a user