diff --git a/apps/red-ui/src/app/components/buttons/file-download-btn/file-download-btn.component.ts b/apps/red-ui/src/app/components/buttons/file-download-btn/file-download-btn.component.ts
index 82cc64d50..1686b0f38 100644
--- a/apps/red-ui/src/app/components/buttons/file-download-btn/file-download-btn.component.ts
+++ b/apps/red-ui/src/app/components/buttons/file-download-btn/file-download-btn.component.ts
@@ -4,6 +4,7 @@ import { ProjectWrapper } from '../../../state/model/project.wrapper';
import { FileStatusWrapper } from '../../../screens/file/model/file-status.wrapper';
import { FileDownloadService } from '../../../upload-download/file-download.service';
import { NotificationService } from '../../../notification/notification.service';
+import { TranslateService } from '@ngx-translate/core';
export type MenuState = 'OPEN' | 'CLOSED';
@@ -22,6 +23,7 @@ export class FileDownloadBtnComponent {
constructor(
private readonly _permissionsService: PermissionsService,
private readonly _fileDownloadService: FileDownloadService,
+ private readonly _translateService: TranslateService,
private readonly _notificationService: NotificationService
) {}
@@ -35,7 +37,8 @@ export class FileDownloadBtnComponent {
downloadFiles($event: MouseEvent) {
$event.stopPropagation();
- // Bulk Download
- this._fileDownloadService.downloadFiles(Array.isArray(this.file) ? this.file : [this.file], this.project).subscribe((data) => {});
+ this._fileDownloadService.downloadFiles(Array.isArray(this.file) ? this.file : [this.file], this.project).subscribe(() => {
+ this._notificationService.showToastNotification(this._translateService.instant('download-status.queued'));
+ });
}
}
diff --git a/apps/red-ui/src/app/dialogs/assign-owner-dialog/assign-owner-dialog.component.ts b/apps/red-ui/src/app/dialogs/assign-owner-dialog/assign-owner-dialog.component.ts
index 0cb553200..835be80a9 100644
--- a/apps/red-ui/src/app/dialogs/assign-owner-dialog/assign-owner-dialog.component.ts
+++ b/apps/red-ui/src/app/dialogs/assign-owner-dialog/assign-owner-dialog.component.ts
@@ -80,9 +80,6 @@ export class AssignOwnerDialogComponent {
pw.project.memberIds = memberIds;
pw.project.ownerId = ownerId;
await this._appStateService.addOrUpdateProject(pw.project);
- this._notificationService.showToastNotification(
- 'Successfully assigned ' + this.userService.getNameForId(ownerId) + ' to project: ' + pw.project.projectName
- );
}
if (this.data.type === 'file') {
@@ -99,9 +96,6 @@ export class AssignOwnerDialogComponent {
for (const file of this.data.files) {
file.currentReviewer = reviewerId;
file.reviewerName = this.userService.getNameForId(reviewerId);
- this._notificationService.showToastNotification(
- 'Successfully assigned ' + this.userService.getNameForId(reviewerId) + ' to file: ' + file.filename
- );
}
}
} catch (error) {
diff --git a/apps/red-ui/src/app/screens/file/file-preview-screen/file-preview-screen.component.html b/apps/red-ui/src/app/screens/file/file-preview-screen/file-preview-screen.component.html
index 79d076308..b5503b64c 100644
--- a/apps/red-ui/src/app/screens/file/file-preview-screen/file-preview-screen.component.html
+++ b/apps/red-ui/src/app/screens/file/file-preview-screen/file-preview-screen.component.html
@@ -3,11 +3,17 @@
diff --git a/apps/red-ui/src/app/screens/file/file-preview-screen/file-preview-screen.component.ts b/apps/red-ui/src/app/screens/file/file-preview-screen/file-preview-screen.component.ts
index 3831f07da..378dd8114 100644
--- a/apps/red-ui/src/app/screens/file/file-preview-screen/file-preview-screen.component.ts
+++ b/apps/red-ui/src/app/screens/file/file-preview-screen/file-preview-screen.component.ts
@@ -67,6 +67,7 @@ export class FilePreviewScreenComponent implements OnInit, OnDestroy {
loadingMessage: string;
canPerformAnnotationActions: boolean;
filesAutoUpdateTimer: Subscription;
+ fileReanalysedSubscription: Subscription;
constructor(
public readonly appStateService: AppStateService,
@@ -160,8 +161,8 @@ export class FilePreviewScreenComponent implements OnInit, OnDestroy {
return this.permissionsService.fileRequiresReanalysis();
}
- get canNotSwitchToDeltaView() {
- return this.fileData?.redactionChangeLog?.redactionLogEntry?.length === 0;
+ get canSwitchToDeltaView() {
+ return this.fileData?.redactionChangeLog?.redactionLogEntry?.length > 0;
}
ngOnInit(): void {
@@ -181,7 +182,7 @@ export class FilePreviewScreenComponent implements OnInit, OnDestroy {
this._loadFileData().subscribe(() => {
this._updateCanPerformActions();
});
- this.appStateService.fileReanalysed.subscribe((fileStatus: FileStatusWrapper) => {
+ this.fileReanalysedSubscription = this.appStateService.fileReanalysed.subscribe((fileStatus: FileStatusWrapper) => {
if (fileStatus.fileId === this.fileId) {
this._loadFileData(true).subscribe(() => {
this.viewReady = true;
@@ -195,6 +196,7 @@ export class FilePreviewScreenComponent implements OnInit, OnDestroy {
ngOnDestroy(): void {
this.filesAutoUpdateTimer.unsubscribe();
+ this.fileReanalysedSubscription.unsubscribe();
}
private _loadFileData(performUpdate: boolean = false) {
diff --git a/apps/red-ui/src/app/screens/file/model/file-data.model.ts b/apps/red-ui/src/app/screens/file/model/file-data.model.ts
index 24f8f88a7..556ce6af9 100644
--- a/apps/red-ui/src/app/screens/file/model/file-data.model.ts
+++ b/apps/red-ui/src/app/screens/file/model/file-data.model.ts
@@ -63,7 +63,7 @@ export class FileDataModel {
private _convertData(dictionaryData: { [p: string]: TypeValue }): RedactionLogEntryWrapper[] {
let result: RedactionLogEntryWrapper[] = [];
- this.redactionChangeLog.redactionLogEntry.forEach((changeLogEntry) => {
+ this.redactionChangeLog?.redactionLogEntry?.forEach((changeLogEntry) => {
if (changeLogEntry.changeType === 'REMOVED') {
const redactionLogEntryWrapper: RedactionLogEntryWrapper = { actionPendingReanalysis: false };
@@ -83,7 +83,7 @@ export class FileDataModel {
return;
}
- const existingChangeLogEntry = this.redactionChangeLog.redactionLogEntry.find((rle) => rle.id === redactionLogEntry.id);
+ const existingChangeLogEntry = this.redactionChangeLog?.redactionLogEntry?.find((rle) => rle.id === redactionLogEntry.id);
// copy the redactionLog Entry
const redactionLogEntryWrapper: RedactionLogEntryWrapper = { actionPendingReanalysis: false };
diff --git a/apps/red-ui/src/assets/i18n/en.json b/apps/red-ui/src/assets/i18n/en.json
index 7b388e193..5d73855a9 100644
--- a/apps/red-ui/src/assets/i18n/en.json
+++ b/apps/red-ui/src/assets/i18n/en.json
@@ -22,6 +22,7 @@
}
},
"download-status": {
+ "queued": "Your download has been queued, you can see all your requested downloads here: My Downloads .",
"error": {
"generic": "Download failed"
},
@@ -279,6 +280,9 @@
"delta": "Delta",
"redacted": "Preview",
"standard": "Standard",
+ "standard-tooltip": "Standard Workload view shows all hints, redactions, recommendations & suggestions. This view allows editing.",
+ "redacted-tooltip": "Redaction preview shows only redactions. Consider this a preview for the final redacted version. This view is only available if the file has no pending changes & doesn't require a reanalysis",
+ "delta-tooltip": "Delta View shows only the changes since last re-analysis. This view is only available if there is at least 1 change",
"no-annotations-for-page": "There are no redactions, hints or requests on this page.",
"show-redacted-view": "Show Redacted Preview",
"cannot-show-redacted-view": "Redactions out of sync. Redacted Preview only available after reanalysis",