diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index 87d97c01a..c35e4f6ea 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -135,6 +135,7 @@ import localeSv from '@angular/common/locales/sv' import localeTr from '@angular/common/locales/tr' import localeUk from '@angular/common/locales/uk' import localeZh from '@angular/common/locales/zh' +import { LoadingDialogComponent } from './components/common/loading-dialog/loading-dialog.component' registerLocaleData(localeAf) registerLocaleData(localeAr) @@ -256,6 +257,7 @@ function initializeApp(settings: SettingsService) { CustomFieldsComponent, CustomFieldEditDialogComponent, CustomFieldsDropdownComponent, + LoadingDialogComponent, ], imports: [ BrowserModule, diff --git a/src-ui/src/app/components/common/loading-dialog/loading-dialog.component.html b/src-ui/src/app/components/common/loading-dialog/loading-dialog.component.html new file mode 100644 index 000000000..1247452e4 --- /dev/null +++ b/src-ui/src/app/components/common/loading-dialog/loading-dialog.component.html @@ -0,0 +1,14 @@ + + + diff --git a/src-ui/src/app/components/common/loading-dialog/loading-dialog.component.scss b/src-ui/src/app/components/common/loading-dialog/loading-dialog.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/src-ui/src/app/components/common/loading-dialog/loading-dialog.component.spec.ts b/src-ui/src/app/components/common/loading-dialog/loading-dialog.component.spec.ts new file mode 100644 index 000000000..3045242f6 --- /dev/null +++ b/src-ui/src/app/components/common/loading-dialog/loading-dialog.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { LoadingDialogComponent } from './loading-dialog.component' + +describe('LoadingDialogComponent', () => { + let component: LoadingDialogComponent + let fixture: ComponentFixture + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [LoadingDialogComponent], + }) + fixture = TestBed.createComponent(LoadingDialogComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('needs tests', () => { + expect(false).toBeTruthy() + }) +}) diff --git a/src-ui/src/app/components/common/loading-dialog/loading-dialog.component.ts b/src-ui/src/app/components/common/loading-dialog/loading-dialog.component.ts new file mode 100644 index 000000000..6d92f8d8a --- /dev/null +++ b/src-ui/src/app/components/common/loading-dialog/loading-dialog.component.ts @@ -0,0 +1,20 @@ +import { Component, Input } from '@angular/core' +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'pngx-loading-dialog', + templateUrl: './loading-dialog.component.html', + styleUrls: ['./loading-dialog.component.scss'], +}) +export class LoadingDialogComponent { + constructor(public activeModal: NgbActiveModal) {} + + @Input() + verb: string = $localize`Loading` + + @Input() + total: number + + @Input() + current: number +} diff --git a/src-ui/src/app/components/document-detail/document-detail.component.html b/src-ui/src/app/components/document-detail/document-detail.component.html index af13a1428..9883bb39b 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.html +++ b/src-ui/src/app/components/document-detail/document-detail.component.html @@ -15,7 +15,7 @@
-
diff --git a/src-ui/src/app/components/document-detail/document-detail.component.scss b/src-ui/src/app/components/document-detail/document-detail.component.scss index 4e3880a15..467e8941f 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.scss +++ b/src-ui/src/app/components/document-detail/document-detail.component.scss @@ -20,6 +20,10 @@ top: 0 !important; background-color: gray !important; } + + ::ng-deep #printServiceDialog { + display: none !important; + } } ::ng-deep .ng-select-taggable { diff --git a/src-ui/src/app/components/document-detail/document-detail.component.ts b/src-ui/src/app/components/document-detail/document-detail.component.ts index b1fc40893..6196911e1 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.ts +++ b/src-ui/src/app/components/document-detail/document-detail.component.ts @@ -10,6 +10,7 @@ import { ActivatedRoute, Router } from '@angular/router' import { NgbDateStruct, NgbModal, + NgbModalRef, NgbNav, NgbNavChangeEvent, } from '@ng-bootstrap/ng-bootstrap' @@ -78,6 +79,8 @@ import { InvalidPDFException } from 'ngx-extended-pdf-viewer/lib/events/invalid- import { PagesLoadedEvent } from 'ngx-extended-pdf-viewer/lib/events/pages-loaded-event' import { NgxExtendedPdfViewerService } from 'ngx-extended-pdf-viewer' import { pdfDefaultOptions } from 'ngx-extended-pdf-viewer' +import { LoadingDialogComponent } from '../common/loading-dialog/loading-dialog.component' +import { ProgressBarEvent } from 'ngx-extended-pdf-viewer/lib/events/progress-bar-event' enum DocumentDetailNavIDs { Details = 1, @@ -156,6 +159,8 @@ export class DocumentDetailComponent previewZoomSetting: ZoomSetting = ZoomSetting.Width previewLoading: boolean = true + printLoadingModal: NgbModalRef + store: BehaviorSubject isDirty$: Observable unsubscribeNotifier: Subject = new Subject() @@ -839,6 +844,29 @@ export class DocumentDetailComponent this.printService.print() } + onBeforePrint(): void { + this.printLoadingModal = this.modalService.open(LoadingDialogComponent, { + backdrop: 'static', + }) + const loadingDialog = this.printLoadingModal + .componentInstance as LoadingDialogComponent + loadingDialog.verb = $localize`Processing page` + } + + onProgress(event: ProgressBarEvent): void { + if (event.type === 'print' && this.printLoadingModal) { + const loadingDialog = this.printLoadingModal + .componentInstance as LoadingDialogComponent + loadingDialog.current = event.page ?? 0 + loadingDialog.total = event.total + } + } + + onAfterPrint(): void { + this.printLoadingModal.close() + this.printLoadingModal = null + } + get showPermissions(): boolean { return ( this.permissionsService.currentUserCan(