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 @@
- {{ 'file-preview.standard' | translate }} - {{ 'file-preview.delta' | translate }} + +
{{ 'file-preview.standard' | translate }}
+
+ +
{{ 'file-preview.delta' | translate }}
+
- {{ 'file-preview.redacted' | translate }} +
+ {{ 'file-preview.redacted' | translate }} +
+
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",