diff --git a/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.html b/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.html
index 58ba0bd15..283a85bf1 100644
--- a/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.html
+++ b/src-ui/src/app/components/common/confirm-dialog/merge-as-versions-confirm-dialog/merge-as-versions-confirm-dialog.component.html
@@ -49,10 +49,10 @@
diff --git a/src-ui/src/app/components/document-detail/document-version-dropdown/add-existing-document-version-dialog/add-existing-document-version-dialog.component.html b/src-ui/src/app/components/document-detail/document-version-dropdown/add-existing-document-version-dialog/add-existing-document-version-dialog.component.html
index c92993c93..3a08646dd 100644
--- a/src-ui/src/app/components/document-detail/document-version-dropdown/add-existing-document-version-dialog/add-existing-document-version-dialog.component.html
+++ b/src-ui/src/app/components/document-detail/document-version-dropdown/add-existing-document-version-dialog/add-existing-document-version-dialog.component.html
@@ -13,6 +13,6 @@
Select one document to add as a version.
diff --git a/src-ui/src/app/components/document-detail/document-version-dropdown/add-existing-document-version-dialog/add-existing-document-version-dialog.component.spec.ts b/src-ui/src/app/components/document-detail/document-version-dropdown/add-existing-document-version-dialog/add-existing-document-version-dialog.component.spec.ts
index 8d8a20a2a..f41ae2b9f 100644
--- a/src-ui/src/app/components/document-detail/document-version-dropdown/add-existing-document-version-dialog/add-existing-document-version-dialog.component.spec.ts
+++ b/src-ui/src/app/components/document-detail/document-version-dropdown/add-existing-document-version-dialog/add-existing-document-version-dialog.component.spec.ts
@@ -53,4 +53,21 @@ describe('AddExistingDocumentVersionDialogComponent', () => {
expect(activeModal.dismiss).toHaveBeenCalled()
})
+
+ it('should re-render the buttons when they are toggled from outside', async () => {
+ const cancelButton: HTMLButtonElement = fixture.nativeElement.querySelector(
+ '.modal-footer button'
+ )
+ expect(cancelButton.disabled).toBeFalsy()
+
+ // No detectChanges: the dropdown toggling this from a request callback is
+ // all that happens, and nothing else schedules a render for the modal
+ component.buttonsEnabled.set(false)
+ await fixture.whenStable()
+ expect(cancelButton.disabled).toBeTruthy()
+
+ component.buttonsEnabled.set(true)
+ await fixture.whenStable()
+ expect(cancelButton.disabled).toBeFalsy()
+ })
})
diff --git a/src-ui/src/app/components/document-detail/document-version-dropdown/add-existing-document-version-dialog/add-existing-document-version-dialog.component.ts b/src-ui/src/app/components/document-detail/document-version-dropdown/add-existing-document-version-dialog/add-existing-document-version-dialog.component.ts
index ce967a4ad..e06e14a08 100644
--- a/src-ui/src/app/components/document-detail/document-version-dropdown/add-existing-document-version-dialog/add-existing-document-version-dialog.component.ts
+++ b/src-ui/src/app/components/document-detail/document-version-dropdown/add-existing-document-version-dialog/add-existing-document-version-dialog.component.ts
@@ -1,4 +1,11 @@
-import { Component, EventEmitter, Input, Output, inject } from '@angular/core'
+import {
+ Component,
+ EventEmitter,
+ Input,
+ Output,
+ inject,
+ signal,
+} from '@angular/core'
import { FormsModule } from '@angular/forms'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
import { DocumentLinkComponent } from 'src/app/components/common/input/document-link/document-link.component'
@@ -15,7 +22,7 @@ export class AddExistingDocumentVersionDialogComponent {
@Output() confirmClicked = new EventEmitter()
selectedDocumentIDs: number[] = []
- buttonsEnabled = true
+ readonly buttonsEnabled = signal(true)
confirm(): void {
if (this.selectedDocumentIDs.length !== 1) return
diff --git a/src-ui/src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.spec.ts b/src-ui/src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.spec.ts
index f69f967ab..23f1ad499 100644
--- a/src-ui/src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.spec.ts
+++ b/src-ui/src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.spec.ts
@@ -1,5 +1,5 @@
import { DatePipe } from '@angular/common'
-import { SimpleChange } from '@angular/core'
+import { SimpleChange, signal } from '@angular/core'
import { ComponentFixture, TestBed } from '@angular/core/testing'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
@@ -342,7 +342,7 @@ describe('DocumentVersionDropdownComponent', () => {
const modal = {
componentInstance: {
rootDocumentID: null,
- buttonsEnabled: true,
+ buttonsEnabled: signal(true),
confirmClicked,
},
close: jest.fn(),
diff --git a/src-ui/src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.ts b/src-ui/src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.ts
index a46fa972d..f9711fd76 100644
--- a/src-ui/src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.ts
+++ b/src-ui/src/app/components/document-detail/document-version-dropdown/document-version-dropdown.component.ts
@@ -290,7 +290,7 @@ export class DocumentVersionDropdownComponent implements OnChanges, OnDestroy {
dialog.confirmClicked
.pipe(takeUntil(this.destroy$), takeUntil(this.documentChange$))
.subscribe((existingDocumentID) => {
- dialog.buttonsEnabled = false
+ dialog.buttonsEnabled.set(false)
const versionLabel = this.newVersionLabel?.trim()
this.documentsService
.mergeDocumentsAsVersions(
@@ -301,7 +301,7 @@ export class DocumentVersionDropdownComponent implements OnChanges, OnDestroy {
.pipe(
switchMap(() => this.documentsService.getVersions(this.documentId)),
first(),
- finalize(() => (dialog.buttonsEnabled = true)),
+ finalize(() => dialog.buttonsEnabled.set(true)),
takeUntil(this.destroy$),
takeUntil(this.documentChange$)
)
diff --git a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts
index 2009ab06d..497bf0de7 100644
--- a/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts
+++ b/src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts
@@ -1012,7 +1012,6 @@ export class BulkEditorComponent
mergeDialog.confirmClicked
.pipe(takeUntil(this.unsubscribeNotifier))
.subscribe(() => {
- mergeDialog.buttonsEnabled = false
this.executeDocumentAction(
modal,
this.documentService.mergeDocumentsAsVersions(