diff --git a/apps/red-ui/src/app/app-routing.module.ts b/apps/red-ui/src/app/app-routing.module.ts
index 32afdf260..1ce33d29d 100644
--- a/apps/red-ui/src/app/app-routing.module.ts
+++ b/apps/red-ui/src/app/app-routing.module.ts
@@ -15,6 +15,7 @@ import { DashboardGuard } from '@guards/dashboard-guard.service';
import { TrashGuard } from '@guards/trash.guard';
import { ARCHIVE_ROUTE, BreadcrumbTypes, DOSSIER_ID, DOSSIER_TEMPLATE_ID, DOSSIERS_ARCHIVE, DOSSIERS_ROUTE, FILE_ID } from '@red/domain';
import { DossierFilesGuard } from '@guards/dossier-files-guard';
+import { WebViewerLoadedGuard } from './modules/pdf-viewer/services/webviewer-loaded.guard';
const routes: Routes = [
{
@@ -94,7 +95,7 @@ const routes: Routes = [
},
{
path: `:${DOSSIER_ID}/file/:${FILE_ID}`,
- canActivate: [CompositeRouteGuard],
+ canActivate: [CompositeRouteGuard, WebViewerLoadedGuard],
data: {
routeGuards: [DossierFilesGuard],
breadcrumbs: [BreadcrumbTypes.dossierTemplate, BreadcrumbTypes.dossier, BreadcrumbTypes.file],
diff --git a/apps/red-ui/src/app/modules/file-preview/services/file-data.service.ts b/apps/red-ui/src/app/modules/file-preview/services/file-data.service.ts
index 637a0d150..a65b8fd96 100644
--- a/apps/red-ui/src/app/modules/file-preview/services/file-data.service.ts
+++ b/apps/red-ui/src/app/modules/file-preview/services/file-data.service.ts
@@ -14,7 +14,6 @@ import { EntitiesService, shareLast, Toaster } from '@iqser/common-ui';
import { RedactionLogService } from '@services/files/redaction-log.service';
import { TextHighlightService } from '@services/files/text-highlight.service';
import { ViewModeService } from './view-mode.service';
-import { Core } from '@pdftron/webviewer';
import dayjs from 'dayjs';
import { NGXLogger } from 'ngx-logger';
import { MultiSelectService } from './multi-select.service';
diff --git a/apps/red-ui/src/app/modules/pdf-viewer/components/compare-file-input/compare-file-input.component.html b/apps/red-ui/src/app/modules/pdf-viewer/components/compare-file-input/compare-file-input.component.html
index 34025fc63..d62045d54 100644
--- a/apps/red-ui/src/app/modules/pdf-viewer/components/compare-file-input/compare-file-input.component.html
+++ b/apps/red-ui/src/app/modules/pdf-viewer/components/compare-file-input/compare-file-input.component.html
@@ -1 +1 @@
-
+
diff --git a/apps/red-ui/src/app/modules/pdf-viewer/components/compare-file-input/compare-file-input.component.ts b/apps/red-ui/src/app/modules/pdf-viewer/components/compare-file-input/compare-file-input.component.ts
index ad92e70c7..99e3e961e 100644
--- a/apps/red-ui/src/app/modules/pdf-viewer/components/compare-file-input/compare-file-input.component.ts
+++ b/apps/red-ui/src/app/modules/pdf-viewer/components/compare-file-input/compare-file-input.component.ts
@@ -20,7 +20,7 @@ import PDFDoc = Core.PDFNet.PDFDoc;
styleUrls: ['./compare-file-input.component.scss'],
})
export class CompareFileInputComponent {
- @ViewChild('input', { static: true }) readonly input: ElementRef;
+ @ViewChild('input', { static: true }) private readonly _input: ElementRef;
constructor(
private readonly _pdf: PdfViewer,
@@ -44,7 +44,7 @@ export class CompareFileInputComponent {
upload(files: FileList) {
const fileToCompare = files[0];
- this.input.nativeElement.value = null;
+ this._input.nativeElement.value = null;
if (!fileToCompare) {
console.error('No file to compare!');
diff --git a/apps/red-ui/src/app/modules/pdf-viewer/pdf-viewer.component.html b/apps/red-ui/src/app/modules/pdf-viewer/pdf-viewer.component.html
index 13cb7017f..0df39e49d 100644
--- a/apps/red-ui/src/app/modules/pdf-viewer/pdf-viewer.component.html
+++ b/apps/red-ui/src/app/modules/pdf-viewer/pdf-viewer.component.html
@@ -1,4 +1,4 @@
-
+
diff --git a/apps/red-ui/src/app/modules/pdf-viewer/pdf-viewer.component.ts b/apps/red-ui/src/app/modules/pdf-viewer/pdf-viewer.component.ts
index 219388ddf..a9e9f6442 100644
--- a/apps/red-ui/src/app/modules/pdf-viewer/pdf-viewer.component.ts
+++ b/apps/red-ui/src/app/modules/pdf-viewer/pdf-viewer.component.ts
@@ -1,32 +1,8 @@
-import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';
-import { PdfViewer } from './services/pdf-viewer.service';
-import { REDAnnotationManager } from './services/annotation-manager.service';
-import { ViewerHeaderService } from './services/viewer-header.service';
-import { CompareFileInputComponent } from './components/compare-file-input/compare-file-input.component';
-import { REDDocumentViewer } from './services/document-viewer.service';
+import { Component } from '@angular/core';
@Component({
selector: 'redaction-pdf-viewer',
templateUrl: './pdf-viewer.component.html',
styleUrls: ['./pdf-viewer.component.scss'],
})
-export class PdfViewerComponent implements OnInit {
- @ViewChild('viewer', { static: true }) private readonly _viewer: ElementRef;
- @ViewChild(CompareFileInputComponent) private readonly _compare: CompareFileInputComponent;
-
- constructor(
- private readonly _pdf: PdfViewer,
- private readonly _annotationManager: REDAnnotationManager,
- private readonly _documentViewer: REDDocumentViewer,
- private readonly _viewerHeaderService: ViewerHeaderService,
- ) {}
-
- ngOnInit() {
- const pdfInit = this._pdf.init(this._viewer.nativeElement as HTMLElement);
- return pdfInit.then(instance => {
- this._annotationManager.init(instance.Core.annotationManager);
- this._documentViewer.init(instance.Core.documentViewer);
- this._viewerHeaderService.init(this._compare.input);
- });
- }
-}
+export class PdfViewerComponent {}
diff --git a/apps/red-ui/src/app/modules/pdf-viewer/pdf-viewer.module.ts b/apps/red-ui/src/app/modules/pdf-viewer/pdf-viewer.module.ts
index 41d650636..73728338f 100644
--- a/apps/red-ui/src/app/modules/pdf-viewer/pdf-viewer.module.ts
+++ b/apps/red-ui/src/app/modules/pdf-viewer/pdf-viewer.module.ts
@@ -11,6 +11,7 @@ import { PaginatorComponent } from './components/paginator/paginator.component';
import { MatIconModule } from '@angular/material/icon';
import { AnnotationDrawService } from './services/annotation-draw.service';
import { REDDocumentViewer } from './services/document-viewer.service';
+import { WebViewerLoadedGuard } from './services/webviewer-loaded.guard';
@NgModule({
declarations: [PdfViewerComponent, CompareFileInputComponent, PaginatorComponent],
@@ -24,6 +25,7 @@ import { REDDocumentViewer } from './services/document-viewer.service';
TooltipsService,
ViewerHeaderService,
AnnotationDrawService,
+ WebViewerLoadedGuard,
],
})
export class PdfViewerModule {}
diff --git a/apps/red-ui/src/app/modules/pdf-viewer/services/viewer-header.service.ts b/apps/red-ui/src/app/modules/pdf-viewer/services/viewer-header.service.ts
index 5bed4881a..582eb9528 100644
--- a/apps/red-ui/src/app/modules/pdf-viewer/services/viewer-header.service.ts
+++ b/apps/red-ui/src/app/modules/pdf-viewer/services/viewer-header.service.ts
@@ -1,4 +1,4 @@
-import { ElementRef, Inject, Injectable, Injector } from '@angular/core';
+import { Inject, Injectable, Injector } from '@angular/core';
import { IHeaderElement, RotationTypes } from '@red/domain';
import { HeaderElements, HeaderElementType } from '../../file-preview/utils/constants';
import { TranslateService } from '@ngx-translate/core';
@@ -145,7 +145,21 @@ export class ViewerHeaderService {
};
}
- init(compareFileInput: ElementRef): void {
+ private get _compare(): IHeaderElement {
+ return {
+ type: 'actionButton',
+ element: HeaderElements.COMPARE_BUTTON,
+ dataElement: HeaderElements.COMPARE_BUTTON,
+ img: this._convertPath('/assets/icons/general/pdftron-action-compare.svg'),
+ title: 'Compare',
+ onClick: async () => {
+ document.getElementById('compareFileInput').click();
+ this.#docBeforeCompare = await this._documentViewer.blob();
+ },
+ };
+ }
+
+ init(): void {
this.#buttons = new Map([
[HeaderElements.SHAPE_TOOL_GROUP_BUTTON, this._rectangle],
[HeaderElements.ROTATE_LEFT_BUTTON, this._rotateLeft],
@@ -153,7 +167,7 @@ export class ViewerHeaderService {
[HeaderElements.APPLY_ROTATION, this._applyRotation],
[HeaderElements.DISCARD_ROTATION, this._discardRotation],
[HeaderElements.TOGGLE_TOOLTIPS, this._toggleTooltips],
- [HeaderElements.COMPARE_BUTTON, this._compare(compareFileInput)],
+ [HeaderElements.COMPARE_BUTTON, this._compare],
[HeaderElements.CLOSE_COMPARE_BUTTON, this._closeCompare],
]);
@@ -213,21 +227,6 @@ export class ViewerHeaderService {
this._pdf.navigateTo(1);
}
- private _compare(compareFileInput: ElementRef): IHeaderElement {
- return {
- type: 'actionButton',
- element: HeaderElements.COMPARE_BUTTON,
- dataElement: HeaderElements.COMPARE_BUTTON,
- img: this._convertPath('/assets/icons/general/pdftron-action-compare.svg'),
- title: 'Compare',
- onClick: async () => {
- const element = compareFileInput.nativeElement as HTMLElement;
- element.click();
- this.#docBeforeCompare = await this._documentViewer.blob();
- },
- };
- }
-
private _pushGroup(items: IHeaderElement[], group: HeaderElementType[]): void {
const enabledItems = group.filter(item => this._isEnabled(item));
if (enabledItems.length) {
diff --git a/apps/red-ui/src/app/modules/pdf-viewer/services/webviewer-loaded.guard.ts b/apps/red-ui/src/app/modules/pdf-viewer/services/webviewer-loaded.guard.ts
new file mode 100644
index 000000000..f61551243
--- /dev/null
+++ b/apps/red-ui/src/app/modules/pdf-viewer/services/webviewer-loaded.guard.ts
@@ -0,0 +1,30 @@
+import { Injectable } from '@angular/core';
+import { CanActivate } from '@angular/router';
+import { REDDocumentViewer } from './document-viewer.service';
+import { PdfViewer } from './pdf-viewer.service';
+import { REDAnnotationManager } from './annotation-manager.service';
+import { ViewerHeaderService } from './viewer-header.service';
+
+@Injectable()
+export class WebViewerLoadedGuard implements CanActivate {
+ constructor(
+ private readonly _documentViewer: REDDocumentViewer,
+ private readonly _pdf: PdfViewer,
+ private readonly _annotationManager: REDAnnotationManager,
+ private readonly _viewerHeaderService: ViewerHeaderService,
+ ) {}
+
+ async canActivate() {
+ if (this._pdf.instance) {
+ return true;
+ }
+
+ const instance = await this._pdf.init(document.getElementById('viewer'));
+
+ this._annotationManager.init(instance.Core.annotationManager);
+ this._documentViewer.init(instance.Core.documentViewer);
+ this._viewerHeaderService.init();
+
+ return true;
+ }
+}