+
diff --git a/apps/red-ui/src/app/screens/file/file-preview-screen/file-preview-screen.component.scss b/apps/red-ui/src/app/screens/file/file-preview-screen/file-preview-screen.component.scss
index 7b53dc8a5..f778e58d1 100644
--- a/apps/red-ui/src/app/screens/file/file-preview-screen/file-preview-screen.component.scss
+++ b/apps/red-ui/src/app/screens/file/file-preview-screen/file-preview-screen.component.scss
@@ -101,7 +101,16 @@ redaction-pdf-viewer {
background-color: #F9FAFB;
.annotation-actions {
+ background: linear-gradient(to right, transparent 0%, #F9FAFB, #F9FAFB, #F9FAFB);
display: flex;
+ align-items: center;
+ justify-content: flex-end;
+ width: 120px;
+ padding-right: 16px;
+
+ .confirm{
+ color: $green-2;
+ }
}
}
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 b5c4014b0..7093bc6ac 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
@@ -1,5 +1,5 @@
-import { ChangeDetectorRef, Component, ElementRef, OnInit, ViewChild } from '@angular/core';
-import { ActivatedRoute, Router } from '@angular/router';
+import {ChangeDetectorRef, Component, ElementRef, OnInit, ViewChild} from '@angular/core';
+import {ActivatedRoute, Router} from '@angular/router';
import {
AddRedactionRequest,
FileUploadControllerService,
@@ -8,25 +8,25 @@ import {
ProjectControllerService,
StatusControllerService
} from '@redaction/red-ui-http';
-import { TranslateService } from '@ngx-translate/core';
-import { NotificationService, NotificationType } from '../../../notification/notification.service';
-import { MatDialog } from '@angular/material/dialog';
-import { AppStateService } from '../../../state/app-state.service';
-import { FileDetailsDialogComponent } from './file-details-dialog/file-details-dialog.component';
-import { ViewerSyncService } from '../service/viewer-sync.service';
-import { Annotations } from '@pdftron/webviewer';
-import { PdfViewerComponent } from '../pdf-viewer/pdf-viewer.component';
-import { AnnotationUtils } from '../../../utils/annotation-utils';
-import { ManualRedactionDialogComponent } from '../manual-redaction-dialog/manual-redaction-dialog.component';
-import { UserService } from '../../../user/user.service';
-import { debounce } from '../../../utils/debounce';
+import {TranslateService} from '@ngx-translate/core';
+import {NotificationService, NotificationType} from '../../../notification/notification.service';
+import {MatDialog} from '@angular/material/dialog';
+import {AppStateService} from '../../../state/app-state.service';
+import {FileDetailsDialogComponent} from './file-details-dialog/file-details-dialog.component';
+import {ViewerSyncService} from '../service/viewer-sync.service';
+import {Annotations} from '@pdftron/webviewer';
+import {PdfViewerComponent} from '../pdf-viewer/pdf-viewer.component';
+import {AnnotationUtils} from '../../../utils/annotation-utils';
+import {ManualRedactionDialogComponent} from '../manual-redaction-dialog/manual-redaction-dialog.component';
+import {UserService} from '../../../user/user.service';
+import {debounce} from '../../../utils/debounce';
import scrollIntoView from 'scroll-into-view-if-needed';
-import { AnnotationFilters } from '../../../utils/types';
-import { FiltersService } from '../service/filters.service';
-import { FileDownloadService } from '../service/file-download.service';
-import { saveAs } from 'file-saver';
-import { FileType } from '../model/file-type';
-import { ConfirmationDialogComponent } from '../../../common/confirmation-dialog/confirmation-dialog.component';
+import {AnnotationFilters} from '../../../utils/types';
+import {FiltersService} from '../service/filters.service';
+import {FileDownloadService} from '../service/file-download.service';
+import {saveAs} from 'file-saver';
+import {FileType} from '../model/file-type';
+import {ConfirmationDialogComponent} from '../../../common/confirmation-dialog/confirmation-dialog.component';
@Component({
selector: 'redaction-file-preview-screen',
@@ -48,7 +48,7 @@ export class FilePreviewScreenComponent implements OnInit {
public displayedAnnotations: { [key: number]: { annotations: Annotations.Annotation[] } } = {};
public selectedAnnotation: Annotations.Annotation;
public filters: AnnotationFilters;
- public expandedFilters: AnnotationFilters = { hint: false };
+ public expandedFilters: AnnotationFilters = {hint: false};
public activeViewerPage: number;
constructor(
@@ -228,26 +228,26 @@ export class FilePreviewScreenComponent implements OnInit {
return AnnotationUtils.getDictionary(annotation);
}
- // async getText(pageNumber: number, rect) {
- // const viewerObject = this._viewerSyncService.activeViewerObject;
- //
- // const { PDFNet } = viewerObject;
- // await PDFNet.initialize();
- // const pdfDoc = await viewerObject.docViewer.getDocument().getPDFDoc();
- // const txt = await PDFNet.TextExtractor.create();
- // await txt.begin(await pdfDoc.getPage(pageNumber), rect);
- //
- // // Extract words one by one.
- // let text = '';
- // let line = await txt.getFirstLine();
- // for (; (await line.isValid()); line = (await line.getNextLine())) {
- // for (let word = await line.getFirstWord(); (await word.isValid()); word = (await word.getNextWord())) {
- // await word.getString();
- // text += word;
- // }
- // }
- // console.log(text);
- // }
+ acceptSuggestionAnnotation($event: MouseEvent, annotation: Annotations.Annotation) {
+ $event.stopPropagation();
+ const dialogRef = this._dialog.open(ConfirmationDialogComponent, {
+ width: '400px',
+ maxWidth: '90vw'
+ });
+
+ const parts = annotation.Id.split(':');
+ const annotationId = parts[parts.length - 1];
+
+ dialogRef.afterClosed().subscribe(result => {
+ if (result) {
+ this._manualRedactionControllerService.approveRequest(this.appStateService.activeProjectId, this.appStateService.activeFile.fileId, annotationId).subscribe(ok => {
+ this._notificationService.showToastNotification(this._translateService.instant('manual-redaction.confirm-annotation.success.label'), null, NotificationType.SUCCESS);
+ }, (err) => {
+ this._notificationService.showToastNotification(this._translateService.instant('manual-redaction.confirm-annotation.failed.label', err), null, NotificationType.ERROR);
+ });
+ }
+ });
+ }
suggestRemoveAnnotation($event: MouseEvent, annotation: Annotations.Annotation) {
$event.stopPropagation();
@@ -256,10 +256,8 @@ export class FilePreviewScreenComponent implements OnInit {
maxWidth: '90vw'
});
- console.log(annotation);
-
const parts = annotation.Id.split(':');
- const annotationId = parts[parts.length-1];
+ const annotationId = parts[parts.length - 1];
dialogRef.afterClosed().subscribe(result => {
if (result) {
@@ -315,4 +313,9 @@ export class FilePreviewScreenComponent implements OnInit {
$event.stopPropagation();
this.expandedFilters[key] = value;
}
+
+ isManuallyAddedAnnotation(annotation: Annotations.Annotation) {
+ return annotation.Id.indexOf('request:') >= 0;
+ }
+
}
diff --git a/apps/red-ui/src/app/screens/file/manual-redaction-dialog/manual-redaction-dialog.component.html b/apps/red-ui/src/app/screens/file/manual-redaction-dialog/manual-redaction-dialog.component.html
index b208929cf..0be3a13ba 100644
--- a/apps/red-ui/src/app/screens/file/manual-redaction-dialog/manual-redaction-dialog.component.html
+++ b/apps/red-ui/src/app/screens/file/manual-redaction-dialog/manual-redaction-dialog.component.html
@@ -1,5 +1,5 @@