mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-07-31 14:33:57 -04:00
Fix: track and restore changed document fields from session storage (#10468)
This commit is contained in:
parent
5e7ee924ff
commit
4637f5c5e5
@ -1030,6 +1030,22 @@ describe('DocumentDetailComponent', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should restore changed fields and mark as dirty', () => {
|
||||||
|
jest
|
||||||
|
.spyOn(activatedRoute, 'paramMap', 'get')
|
||||||
|
.mockReturnValue(of(convertToParamMap({ id: 3, section: 'details' })))
|
||||||
|
jest.spyOn(documentService, 'get').mockReturnValueOnce(of(doc))
|
||||||
|
const docWithChanges = Object.assign({}, doc)
|
||||||
|
docWithChanges.__changedFields = ['title', 'tags', 'owner']
|
||||||
|
jest
|
||||||
|
.spyOn(openDocumentsService, 'getOpenDocument')
|
||||||
|
.mockReturnValue(docWithChanges)
|
||||||
|
fixture.detectChanges() // calls ngOnInit
|
||||||
|
expect(component.documentForm.get('title').dirty).toBeTruthy()
|
||||||
|
expect(component.documentForm.get('tags').dirty).toBeTruthy()
|
||||||
|
expect(component.documentForm.get('permissions_form').dirty).toBeTruthy()
|
||||||
|
})
|
||||||
|
|
||||||
it('should show custom field errors', () => {
|
it('should show custom field errors', () => {
|
||||||
initNormally()
|
initNormally()
|
||||||
component.error = {
|
component.error = {
|
||||||
|
@ -451,6 +451,15 @@ export class DocumentDetailComponent
|
|||||||
]
|
]
|
||||||
delete openDocument['permissions_form']
|
delete openDocument['permissions_form']
|
||||||
}
|
}
|
||||||
|
if (openDocument.__changedFields) {
|
||||||
|
openDocument.__changedFields.forEach((field) => {
|
||||||
|
if (field === 'owner' || field === 'set_permissions') {
|
||||||
|
this.documentForm.get('permissions_form').markAsDirty()
|
||||||
|
} else {
|
||||||
|
this.documentForm.get(field)?.markAsDirty()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
this.updateComponent(openDocument)
|
this.updateComponent(openDocument)
|
||||||
} else {
|
} else {
|
||||||
this.openDocumentService.openDocument(doc)
|
this.openDocumentService.openDocument(doc)
|
||||||
@ -514,7 +523,7 @@ export class DocumentDetailComponent
|
|||||||
)
|
)
|
||||||
.subscribe({
|
.subscribe({
|
||||||
next: ({ doc, dirty }) => {
|
next: ({ doc, dirty }) => {
|
||||||
this.openDocumentService.setDirty(doc, dirty)
|
this.openDocumentService.setDirty(doc, dirty, this.getChangedFields())
|
||||||
},
|
},
|
||||||
error: (error) => {
|
error: (error) => {
|
||||||
this.router.navigate(['404'], {
|
this.router.navigate(['404'], {
|
||||||
|
@ -158,4 +158,7 @@ export interface Document extends ObjectWithPermissions {
|
|||||||
remove_inbox_tags?: boolean
|
remove_inbox_tags?: boolean
|
||||||
|
|
||||||
page_count?: number
|
page_count?: number
|
||||||
|
|
||||||
|
// Frontend only
|
||||||
|
__changedFields?: string[]
|
||||||
}
|
}
|
||||||
|
@ -241,4 +241,15 @@ describe('OpenDocumentsService', () => {
|
|||||||
openDocumentsService.openDocument(doc)
|
openDocumentsService.openDocument(doc)
|
||||||
expect(consoleSpy).toHaveBeenCalled()
|
expect(consoleSpy).toHaveBeenCalled()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should set dirty status with changed fields', () => {
|
||||||
|
subscriptions.push(
|
||||||
|
openDocumentsService.openDocument(documents[0]).subscribe()
|
||||||
|
)
|
||||||
|
const changedFields = { title: 'foo', content: 'bar' }
|
||||||
|
openDocumentsService.setDirty(documents[0], true, changedFields)
|
||||||
|
expect(
|
||||||
|
openDocumentsService.getOpenDocument(documents[0].id).__changedFields
|
||||||
|
).toEqual(['title', 'content'])
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
@ -84,10 +84,20 @@ export class OpenDocumentsService {
|
|||||||
this.save()
|
this.save()
|
||||||
}
|
}
|
||||||
|
|
||||||
setDirty(doc: Document, dirty: boolean) {
|
setDirty(doc: Document, dirty: boolean, changedFields: object = {}) {
|
||||||
if (!this.openDocuments.find((d) => d.id == doc.id)) return
|
const existingDoc = this.getOpenDocument(doc.id)
|
||||||
if (dirty) this.dirtyDocuments.add(doc.id)
|
if (!existingDoc) return
|
||||||
else this.dirtyDocuments.delete(doc.id)
|
if (dirty) {
|
||||||
|
this.dirtyDocuments.add(doc.id)
|
||||||
|
existingDoc.__changedFields = Object.keys(changedFields).filter(
|
||||||
|
(key) => key !== 'id'
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
this.dirtyDocuments.delete(doc.id)
|
||||||
|
existingDoc.__changedFields = []
|
||||||
|
}
|
||||||
|
|
||||||
|
this.save()
|
||||||
}
|
}
|
||||||
|
|
||||||
hasDirty(): boolean {
|
hasDirty(): boolean {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user