]> git.ipfire.org Git - thirdparty/paperless-ngx.git/blob
c47dea0ed87b115187187b3e54fff798ef5dd227
[thirdparty/paperless-ngx.git] /
1 import { Component, TemplateRef, ViewChild } from '@angular/core'
2 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
3 import { DocumentService } from 'src/app/services/rest/document.service'
4 import { ConfirmDialogComponent } from '../confirm-dialog.component'
5 import { PDFDocumentProxy, PdfViewerComponent } from 'ng2-pdf-viewer'
6
7 @Component({
8 selector: 'pngx-delete-pages-confirm-dialog',
9 templateUrl: './delete-pages-confirm-dialog.component.html',
10 styleUrl: './delete-pages-confirm-dialog.component.scss',
11 })
12 export class DeletePagesConfirmDialogComponent extends ConfirmDialogComponent {
13 public documentID: number
14 public pages: number[] = []
15 public currentPage: number = 1
16 public totalPages: number
17
18 @ViewChild('pdfViewer') pdfViewer: PdfViewerComponent
19 @ViewChild('pageCheckOverlay') pageCheckOverlay!: TemplateRef<any>
20 private checks: HTMLElement[] = []
21
22 public get pagesString(): string {
23 return this.pages.join(', ')
24 }
25
26 public get pdfSrc(): string {
27 return this.documentService.getPreviewUrl(this.documentID)
28 }
29
30 constructor(
31 activeModal: NgbActiveModal,
32 private documentService: DocumentService
33 ) {
34 super(activeModal)
35 }
36
37 public pdfPreviewLoaded(pdf: PDFDocumentProxy) {
38 this.totalPages = pdf.numPages
39 }
40
41 pageRendered(event: CustomEvent) {
42 const pageDiv = event.target as HTMLDivElement
43 const check = this.pageCheckOverlay.createEmbeddedView({
44 page: event.detail.pageNumber,
45 })
46 this.checks[event.detail.pageNumber - 1] = check.rootNodes[0]
47 pageDiv?.insertBefore(check.rootNodes[0], pageDiv.firstChild)
48 this.updateChecks()
49 }
50
51 pageCheckChanged(pageNumber: number) {
52 if (!this.pages.includes(pageNumber)) this.pages.push(pageNumber)
53 else if (this.pages.includes(pageNumber))
54 this.pages.splice(this.pages.indexOf(pageNumber), 1)
55 this.updateChecks()
56 }
57
58 private updateChecks() {
59 this.checks.forEach((check, i) => {
60 const input = check.getElementsByTagName('input')[0]
61 input.checked = this.pages.includes(i + 1)
62 })
63 }
64 }