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