From a583cff21c3fa71bb127dc30070d59fa78ec61fc Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 22 Aug 2025 16:04:40 -0700 Subject: [PATCH] Fix: prevent loss of changes when switching between open docs (#10659) --- .../document-detail.component.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) 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 45fb9fc83..302dc9114 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 @@ -442,7 +442,11 @@ export class DocumentDetailComponent ) } - if (this.documentForm.dirty) { + // Prevent mutating stale form values into the next document: only sync if it still matches the active document. + if ( + this.documentForm.dirty && + (this.document?.id === openDocument.id || !this.document) + ) { Object.assign(openDocument, this.documentForm.value) openDocument['owner'] = this.documentForm.get('permissions_form').value['owner'] @@ -489,7 +493,11 @@ export class DocumentDetailComponent this.store.getValue().title !== this.documentForm.get('title').value ) { - this.openDocumentService.setDirty(doc, true) + this.openDocumentService.setDirty( + doc, + true, + this.getChangedFields() + ) } }, }) @@ -682,6 +690,11 @@ export class DocumentDetailComponent this.documentForm.patchValue(docFormValues, { emitEvent: false }) if (!this.userCanEdit) this.documentForm.disable() + setTimeout(() => { + // check again after a tick in case form was dirty + if (!this.userCanEdit) this.documentForm.disable() + else this.documentForm.enable() + }, 10) } get customFieldFormFields(): FormArray {