From afde721ddf17e820b4e369ce55aea346e375df5b Mon Sep 17 00:00:00 2001 From: Dan Percic Date: Sun, 22 May 2022 10:32:58 +0300 Subject: [PATCH] RED-3988: extract paginator component --- .../pdf-paginator.component.html | 27 -------- .../pdf-paginator.component.scss | 62 ------------------- .../pdf-paginator/pdf-paginator.component.ts | 4 +- .../compare-file-input.component.html | 1 + .../compare-file-input.component.scss | 7 +++ .../compare-file-input.component.ts | 38 +++--------- .../paginator/paginator.component.html | 27 ++++++++ .../paginator/paginator.component.scss | 61 ++++++++++++++++++ .../paginator/paginator.component.ts | 11 ++++ .../pdf-viewer/pdf-viewer.component.html | 5 ++ .../pdf-viewer/pdf-viewer.component.scss | 12 ++++ .../pdf-viewer/pdf-viewer.component.ts | 17 +---- .../modules/pdf-viewer/pdf-viewer.module.ts | 14 ++++- .../services/annotation-manager.service.ts | 4 +- .../services/page-rotation.service.ts | 4 +- .../pdf-viewer/services/pdf-viewer.service.ts | 4 +- .../pdf-viewer/services/tooltips.service.ts | 4 +- .../services/viewer-header.service.ts | 4 +- 18 files changed, 154 insertions(+), 152 deletions(-) create mode 100644 apps/red-ui/src/app/modules/pdf-viewer/components/compare-file-input/compare-file-input.component.html create mode 100644 apps/red-ui/src/app/modules/pdf-viewer/components/compare-file-input/compare-file-input.component.scss rename apps/red-ui/src/app/modules/pdf-viewer/{ => components/compare-file-input}/compare-file-input.component.ts (77%) create mode 100644 apps/red-ui/src/app/modules/pdf-viewer/components/paginator/paginator.component.html create mode 100644 apps/red-ui/src/app/modules/pdf-viewer/components/paginator/paginator.component.scss create mode 100644 apps/red-ui/src/app/modules/pdf-viewer/components/paginator/paginator.component.ts create mode 100644 apps/red-ui/src/app/modules/pdf-viewer/pdf-viewer.component.html create mode 100644 apps/red-ui/src/app/modules/pdf-viewer/pdf-viewer.component.scss diff --git a/apps/red-ui/src/app/modules/file-preview/components/pdf-paginator/pdf-paginator.component.html b/apps/red-ui/src/app/modules/file-preview/components/pdf-paginator/pdf-paginator.component.html index 895c09618..e69de29bb 100644 --- a/apps/red-ui/src/app/modules/file-preview/components/pdf-paginator/pdf-paginator.component.html +++ b/apps/red-ui/src/app/modules/file-preview/components/pdf-paginator/pdf-paginator.component.html @@ -1,27 +0,0 @@ - diff --git a/apps/red-ui/src/app/modules/file-preview/components/pdf-paginator/pdf-paginator.component.scss b/apps/red-ui/src/app/modules/file-preview/components/pdf-paginator/pdf-paginator.component.scss index 776be77f4..2d79be4aa 100644 --- a/apps/red-ui/src/app/modules/file-preview/components/pdf-paginator/pdf-paginator.component.scss +++ b/apps/red-ui/src/app/modules/file-preview/components/pdf-paginator/pdf-paginator.component.scss @@ -9,65 +9,3 @@ margin-left: 15px; } } - -.pagination { - z-index: 1; - position: absolute; - bottom: 20px; - left: 50%; - transform: translate(-50%); - background: var(--iqser-white); - color: var(--iqser-grey-7); - border: 1px solid var(--iqser-grey-7); - border-radius: 8px; - padding: 6px 2px; - display: flex; - justify-content: center; - align-items: center; - - > div { - height: 16px; - cursor: default; - } - - .separator { - padding-left: 2px; - padding-right: 2px; - } - - .page-number-input { - -moz-appearance: textfield; - - &::-webkit-outer-spin-button, - &::-webkit-inner-spin-button { - -webkit-appearance: none; - margin: 0; - } - - color: var(--iqser-grey-7); - text-decoration: none; - outline: none; - border: none; - padding: 0; - margin: 0; - cursor: pointer; - - &:hover, - &:focus { - font-weight: bold; - border-bottom: 1px solid var(--iqser-grey-7); - } - } - - .chevron-icon { - height: 16px; - transform: rotate(-90deg); - cursor: pointer; - padding-left: 4px; - padding-right: 4px; - - &:hover { - color: var(--iqser-accent); - } - } -} diff --git a/apps/red-ui/src/app/modules/file-preview/components/pdf-paginator/pdf-paginator.component.ts b/apps/red-ui/src/app/modules/file-preview/components/pdf-paginator/pdf-paginator.component.ts index 835071b21..6cb1f2126 100644 --- a/apps/red-ui/src/app/modules/file-preview/components/pdf-paginator/pdf-paginator.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/components/pdf-paginator/pdf-paginator.component.ts @@ -133,7 +133,7 @@ export class PdfPaginatorComponent extends AutoUnsubscribe implements OnInit, On this._configureElements(); this._configureTextPopup(); - this.pdf.documentViewer.addEventListener('textSelected', (quads, selectedText, pageNumber: number) => { + this.pdf.documentViewer.addEventListener('textSelected', (_, selectedText, pageNumber: number) => { this._selectedText = selectedText; if (this.pdf.isCompare && pageNumber % 2 === 0) { @@ -162,8 +162,6 @@ export class PdfPaginatorComponent extends AutoUnsubscribe implements OnInit, On } private _configureElements() { - // this._viewerHeaderService.initialize(this.compareFileInput); - const dossierTemplateId = this.dossier.dossierTemplateId; const color = this._annotationDrawService.getAndConvertColor(dossierTemplateId, 'manual'); this.pdf.setRectangleToolStyles(color); 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 new file mode 100644 index 000000000..07516d39f --- /dev/null +++ b/apps/red-ui/src/app/modules/pdf-viewer/components/compare-file-input/compare-file-input.component.html @@ -0,0 +1 @@ + diff --git a/apps/red-ui/src/app/modules/pdf-viewer/components/compare-file-input/compare-file-input.component.scss b/apps/red-ui/src/app/modules/pdf-viewer/components/compare-file-input/compare-file-input.component.scss new file mode 100644 index 000000000..69bf74748 --- /dev/null +++ b/apps/red-ui/src/app/modules/pdf-viewer/components/compare-file-input/compare-file-input.component.scss @@ -0,0 +1,7 @@ +:host { + position: absolute; +} + +.file-upload-input { + visibility: hidden; +} diff --git a/apps/red-ui/src/app/modules/pdf-viewer/compare-file-input.component.ts b/apps/red-ui/src/app/modules/pdf-viewer/components/compare-file-input/compare-file-input.component.ts similarity index 77% rename from apps/red-ui/src/app/modules/pdf-viewer/compare-file-input.component.ts rename to apps/red-ui/src/app/modules/pdf-viewer/components/compare-file-input/compare-file-input.component.ts index 84eeaf965..29fe1f4aa 100644 --- a/apps/red-ui/src/app/modules/pdf-viewer/compare-file-input.component.ts +++ b/apps/red-ui/src/app/modules/pdf-viewer/components/compare-file-input/compare-file-input.component.ts @@ -1,35 +1,18 @@ import { Component, ElementRef, ViewChild } from '@angular/core'; -import { environment } from '@environments/environment'; -import { loadCompareDocumentWrapper } from '../file-preview/utils/compare-mode.utils'; -import { HeaderElements } from '../file-preview/utils/constants'; +import { loadCompareDocumentWrapper } from '../../../file-preview/utils/compare-mode.utils'; +import { HeaderElements } from '../../../file-preview/utils/constants'; import { ConfirmationDialogInput, LoadingService } from '@iqser/common-ui'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { FilesMapService } from '@services/files/files-map.service'; +import { FilesMapService } from '../../../../services/files/files-map.service'; import { ActivatedRoute } from '@angular/router'; -import { SharedDialogService } from '@shared/services/dialog.service'; -import { PdfViewer } from './services/pdf-viewer.service'; -import { ViewerHeaderService } from './services/viewer-header.service'; +import { SharedDialogService } from '../../../shared/services/dialog.service'; +import { PdfViewer } from '../../services/pdf-viewer.service'; +import { ViewerHeaderService } from '../../services/viewer-header.service'; @Component({ selector: 'redaction-compare-file-input', - template: ``, - styles: [ - ` - :host { - position: absolute; - } - - .file-upload-input { - visibility: hidden; - } - `, - ], + templateUrl: './compare-file-input.component.html', + styleUrls: ['./compare-file-input.component.scss'], }) export class CompareFileInputComponent { @ViewChild('input', { static: true }) readonly input: ElementRef; @@ -43,7 +26,7 @@ export class CompareFileInputComponent { private readonly _viewerHeaderService: ViewerHeaderService, ) {} - uploadFile(files: FileList) { + upload(files: FileList) { const fileToCompare = files[0]; this.input.nativeElement.value = null; @@ -56,11 +39,10 @@ export class CompareFileInputComponent { fileReader.onload = async () => { const pdfNet = this._pdf.PDFNet; - await pdfNet.initialize(environment.licenseKey ? window.atob(environment.licenseKey) : null); - const compareDocument = await pdfNet.PDFDoc.createFromBuffer(fileReader.result as ArrayBuffer); const currentDocument = await pdfNet.PDFDoc.createFromBuffer(await this._pdf.blob.arrayBuffer()); + // TODO: transform these functions into methods const loadCompareDocument = async () => { this._loadingService.start(); const mergedDocument = await pdfNet.PDFDoc.create(); diff --git a/apps/red-ui/src/app/modules/pdf-viewer/components/paginator/paginator.component.html b/apps/red-ui/src/app/modules/pdf-viewer/components/paginator/paginator.component.html new file mode 100644 index 000000000..242a379e1 --- /dev/null +++ b/apps/red-ui/src/app/modules/pdf-viewer/components/paginator/paginator.component.html @@ -0,0 +1,27 @@ + diff --git a/apps/red-ui/src/app/modules/pdf-viewer/components/paginator/paginator.component.scss b/apps/red-ui/src/app/modules/pdf-viewer/components/paginator/paginator.component.scss new file mode 100644 index 000000000..21be9c450 --- /dev/null +++ b/apps/red-ui/src/app/modules/pdf-viewer/components/paginator/paginator.component.scss @@ -0,0 +1,61 @@ +.pagination { + z-index: 1; + position: absolute; + bottom: 20px; + left: calc(50% - (var(--workload-width) / 2)); + transform: translate(-50%); + background: var(--iqser-white); + color: var(--iqser-grey-7); + border: 1px solid var(--iqser-grey-7); + border-radius: 8px; + padding: 6px 2px; + display: flex; + justify-content: center; + align-items: center; + + > div { + height: 16px; + cursor: default; + } + + .separator { + padding-left: 2px; + padding-right: 2px; + } + + .page-number-input { + -moz-appearance: textfield; + + &::-webkit-outer-spin-button, + &::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; + } + + color: var(--iqser-grey-7); + text-decoration: none; + outline: none; + border: none; + padding: 0; + margin: 0; + cursor: pointer; + + &:hover, + &:focus { + font-weight: bold; + border-bottom: 1px solid var(--iqser-grey-7); + } + } + + .chevron-icon { + height: 16px; + transform: rotate(-90deg); + cursor: pointer; + padding-left: 4px; + padding-right: 4px; + + &:hover { + color: var(--iqser-accent); + } + } +} diff --git a/apps/red-ui/src/app/modules/pdf-viewer/components/paginator/paginator.component.ts b/apps/red-ui/src/app/modules/pdf-viewer/components/paginator/paginator.component.ts new file mode 100644 index 000000000..ff97976ea --- /dev/null +++ b/apps/red-ui/src/app/modules/pdf-viewer/components/paginator/paginator.component.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core'; +import { PdfViewer } from '../../services/pdf-viewer.service'; + +@Component({ + selector: 'redaction-paginator', + templateUrl: './paginator.component.html', + styleUrls: ['./paginator.component.scss'], +}) +export class PaginatorComponent { + constructor(readonly pdf: PdfViewer) {} +} 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 new file mode 100644 index 000000000..13cb7017f --- /dev/null +++ b/apps/red-ui/src/app/modules/pdf-viewer/pdf-viewer.component.html @@ -0,0 +1,5 @@ +
+ + + + diff --git a/apps/red-ui/src/app/modules/pdf-viewer/pdf-viewer.component.scss b/apps/red-ui/src/app/modules/pdf-viewer/pdf-viewer.component.scss new file mode 100644 index 000000000..1301cc73e --- /dev/null +++ b/apps/red-ui/src/app/modules/pdf-viewer/pdf-viewer.component.scss @@ -0,0 +1,12 @@ +:host { + --workload-width: 350px; + --header-height: 111px; +} + +div { + width: calc(100% - var(--workload-width)); + height: calc(100% - var(--header-height)); + bottom: 0; + left: 0; + position: absolute; +} 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 423783000..3946c2a22 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 @@ -2,23 +2,12 @@ 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 './compare-file-input.component'; +import { CompareFileInputComponent } from './components/compare-file-input/compare-file-input.component'; @Component({ selector: 'redaction-pdf-viewer', - template: `
- `, - styles: [ - ` - div { - width: calc(100% - 350px); - height: calc(100% - 111px); - bottom: 0; - left: 0; - position: absolute; - } - `, - ], + templateUrl: './pdf-viewer.component.html', + styleUrls: ['./pdf-viewer.component.scss'], }) export class PdfViewerComponent implements OnInit { @ViewChild('viewer', { static: true }) private readonly _viewer: ElementRef; 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 85bb7f5e0..a6a6b4ff0 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 @@ -1,11 +1,19 @@ import { NgModule } from '@angular/core'; import { PdfViewerComponent } from './pdf-viewer.component'; import { CommonModule } from '@angular/common'; -import { CompareFileInputComponent } from './compare-file-input.component'; +import { CompareFileInputComponent } from './components/compare-file-input/compare-file-input.component'; +import { PageRotationService } from './services/page-rotation.service'; +import { REDAnnotationManager } from './services/annotation-manager.service'; +import { PdfViewer } from './services/pdf-viewer.service'; +import { TooltipsService } from './services/tooltips.service'; +import { ViewerHeaderService } from './services/viewer-header.service'; +import { PaginatorComponent } from './components/paginator/paginator.component'; +import { MatIconModule } from '@angular/material/icon'; @NgModule({ - declarations: [PdfViewerComponent, CompareFileInputComponent], + declarations: [PdfViewerComponent, CompareFileInputComponent, PaginatorComponent], exports: [PdfViewerComponent], - imports: [CommonModule], + imports: [CommonModule, MatIconModule], + providers: [PdfViewer, REDAnnotationManager, PageRotationService, TooltipsService, ViewerHeaderService], }) export class PdfViewerModule {} diff --git a/apps/red-ui/src/app/modules/pdf-viewer/services/annotation-manager.service.ts b/apps/red-ui/src/app/modules/pdf-viewer/services/annotation-manager.service.ts index 9f7f4b267..c3d4d00be 100644 --- a/apps/red-ui/src/app/modules/pdf-viewer/services/annotation-manager.service.ts +++ b/apps/red-ui/src/app/modules/pdf-viewer/services/annotation-manager.service.ts @@ -9,9 +9,7 @@ import { getId, isStringOrWrapper } from '../utils/functions'; import AnnotationManager = Core.AnnotationManager; import Annotation = Core.Annotations.Annotation; -@Injectable({ - providedIn: 'root', -}) +@Injectable() export class REDAnnotationManager { annotationSelected$: Observable<[Annotation[], string]>; #manager: AnnotationManager; diff --git a/apps/red-ui/src/app/modules/pdf-viewer/services/page-rotation.service.ts b/apps/red-ui/src/app/modules/pdf-viewer/services/page-rotation.service.ts index f4d09b597..b8eae0e25 100644 --- a/apps/red-ui/src/app/modules/pdf-viewer/services/page-rotation.service.ts +++ b/apps/red-ui/src/app/modules/pdf-viewer/services/page-rotation.service.ts @@ -20,9 +20,7 @@ import { NGXLogger } from 'ngx-logger'; const ONE_ROTATION_DEGREE = 90; -@Injectable({ - providedIn: 'root', -}) +@Injectable() export class PageRotationService { readonly #rotations$ = new BehaviorSubject>({}); diff --git a/apps/red-ui/src/app/modules/pdf-viewer/services/pdf-viewer.service.ts b/apps/red-ui/src/app/modules/pdf-viewer/services/pdf-viewer.service.ts index 4e70d5a3b..0c4230cc8 100644 --- a/apps/red-ui/src/app/modules/pdf-viewer/services/pdf-viewer.service.ts +++ b/apps/red-ui/src/app/modules/pdf-viewer/services/pdf-viewer.service.ts @@ -21,9 +21,7 @@ import TextHighlightAnnotation = Core.Annotations.TextHighlightAnnotation; import DocumentViewer = Core.DocumentViewer; import Color = Core.Annotations.Color; -@Injectable({ - providedIn: 'root', -}) +@Injectable() export class PdfViewer { readonly currentPage$ = this._activatedRoute.queryParamMap.pipe( map(params => Number(params.get('page') ?? '1')), diff --git a/apps/red-ui/src/app/modules/pdf-viewer/services/tooltips.service.ts b/apps/red-ui/src/app/modules/pdf-viewer/services/tooltips.service.ts index 16652cac7..23bf1c8d7 100644 --- a/apps/red-ui/src/app/modules/pdf-viewer/services/tooltips.service.ts +++ b/apps/red-ui/src/app/modules/pdf-viewer/services/tooltips.service.ts @@ -6,9 +6,7 @@ import { TranslateService } from '@ngx-translate/core'; import { BASE_HREF_FN, BaseHrefFn } from '../../../tokens'; import { PdfViewer } from './pdf-viewer.service'; -@Injectable({ - providedIn: 'root', -}) +@Injectable() export class TooltipsService { readonly #enableIcon = this._convertPath('/assets/icons/general/pdftron-action-enable-tooltips.svg'); readonly #disableIcon = this._convertPath('/assets/icons/general/pdftron-action-disable-tooltips.svg'); 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 1a627f52b..35415cdf6 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 @@ -14,9 +14,7 @@ const divider: IHeaderElement = { type: 'divider', }; -@Injectable({ - providedIn: 'root', -}) +@Injectable() export class ViewerHeaderService { #buttons: Map; readonly #config = new Map([