From c2fb37549bd918bef772899768f19b17c6a98e81 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 8 Jun 2024 07:49:47 -0700 Subject: [PATCH] Restore split dialog accepts doc ID to prevent stale doc, fix frontend tests --- .../split-confirm-dialog.component.spec.ts | 9 +++++++++ .../split-confirm-dialog.component.ts | 18 ++++++++++++++---- .../document-detail.component.spec.ts | 2 +- .../document-detail.component.ts | 2 +- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src-ui/src/app/components/common/confirm-dialog/split-confirm-dialog/split-confirm-dialog.component.spec.ts b/src-ui/src/app/components/common/confirm-dialog/split-confirm-dialog/split-confirm-dialog.component.spec.ts index 27f458537..c010702fa 100644 --- a/src-ui/src/app/components/common/confirm-dialog/split-confirm-dialog/split-confirm-dialog.component.spec.ts +++ b/src-ui/src/app/components/common/confirm-dialog/split-confirm-dialog/split-confirm-dialog.component.spec.ts @@ -7,6 +7,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { DocumentService } from 'src/app/services/rest/document.service' import { PdfViewerModule } from 'ng2-pdf-viewer' +import { of } from 'rxjs' describe('SplitConfirmDialogComponent', () => { let component: SplitConfirmDialogComponent @@ -32,6 +33,14 @@ describe('SplitConfirmDialogComponent', () => { fixture.detectChanges() }) + it('should load document on init', () => { + const getSpy = jest.spyOn(documentService, 'get') + component.documentID = 1 + getSpy.mockReturnValue(of({ id: 1 } as any)) + component.ngOnInit() + expect(documentService.get).toHaveBeenCalledWith(1) + }) + it('should update pagesString when pages are added', () => { component.totalPages = 5 component.page = 2 diff --git a/src-ui/src/app/components/common/confirm-dialog/split-confirm-dialog/split-confirm-dialog.component.ts b/src-ui/src/app/components/common/confirm-dialog/split-confirm-dialog/split-confirm-dialog.component.ts index f8d460b0e..266da00ab 100644 --- a/src-ui/src/app/components/common/confirm-dialog/split-confirm-dialog/split-confirm-dialog.component.ts +++ b/src-ui/src/app/components/common/confirm-dialog/split-confirm-dialog/split-confirm-dialog.component.ts @@ -1,4 +1,4 @@ -import { Component } from '@angular/core' +import { Component, OnInit } from '@angular/core' import { ConfirmDialogComponent } from '../confirm-dialog.component' import { Document } from 'src/app/data/document' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' @@ -11,7 +11,10 @@ import { PDFDocumentProxy } from 'ng2-pdf-viewer' templateUrl: './split-confirm-dialog.component.html', styleUrl: './split-confirm-dialog.component.scss', }) -export class SplitConfirmDialogComponent extends ConfirmDialogComponent { +export class SplitConfirmDialogComponent + extends ConfirmDialogComponent + implements OnInit +{ public get pagesString(): string { let pagesStr = '' @@ -33,13 +36,14 @@ export class SplitConfirmDialogComponent extends ConfirmDialogComponent { private pages: Set = new Set() - public document: Document + public documentID: number + private document: Document public page: number = 1 public totalPages: number public deleteOriginal: boolean = false public get pdfSrc(): string { - return this.documentService.getPreviewUrl(this.document.id) + return this.documentService.getPreviewUrl(this.documentID) } constructor( @@ -51,6 +55,12 @@ export class SplitConfirmDialogComponent extends ConfirmDialogComponent { this.confirmButtonEnabled = this.pages.size > 0 } + ngOnInit(): void { + this.documentService.get(this.documentID).subscribe((r) => { + this.document = r + }) + } + pdfPreviewLoaded(pdf: PDFDocumentProxy) { this.totalPages = pdf.numPages } diff --git a/src-ui/src/app/components/document-detail/document-detail.component.spec.ts b/src-ui/src/app/components/document-detail/document-detail.component.spec.ts index 0194b9544..0a6eb3a5f 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.spec.ts +++ b/src-ui/src/app/components/document-detail/document-detail.component.spec.ts @@ -1099,7 +1099,7 @@ describe('DocumentDetailComponent', () => { expect(req.request.body).toEqual({ documents: [doc.id], method: 'split', - parameters: { pages: '1-2,3-5' }, + parameters: { pages: '1-2,3-5', delete_originals: false }, }) req.error(new ProgressEvent('failed')) modal.componentInstance.confirm() 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 376153597..339d35587 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 @@ -1112,7 +1112,7 @@ export class DocumentDetailComponent modal.componentInstance.title = $localize`Split confirm` modal.componentInstance.messageBold = $localize`This operation will split the selected document(s) into new documents.` modal.componentInstance.btnCaption = $localize`Proceed` - modal.componentInstance.document = this.document + modal.componentInstance.documentID = this.document.id modal.componentInstance.confirmClicked .pipe(takeUntil(this.unsubscribeNotifier)) .subscribe(() => {