mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2026-08-14 06:43:18 +00:00
Frondend bulk edit stuff
This commit is contained in:
@@ -95,6 +95,9 @@
|
|||||||
<button ngbDropdownItem (click)="mergeSelected()" [disabled]="!userCanAdd || list.allSelected || list.selectedCount < 2">
|
<button ngbDropdownItem (click)="mergeSelected()" [disabled]="!userCanAdd || list.allSelected || list.selectedCount < 2">
|
||||||
<i-bs name="journals" class="me-1"></i-bs><ng-container i18n>Merge</ng-container>
|
<i-bs name="journals" class="me-1"></i-bs><ng-container i18n>Merge</ng-container>
|
||||||
</button>
|
</button>
|
||||||
|
<button ngbDropdownItem (click)="mergeSelectedAsVersions()" [disabled]="!userOwnsAll || !userCanEditAll || list.allSelected || list.selectedCount < 2">
|
||||||
|
<i-bs name="journal-bookmark-fill" class="me-1"></i-bs><ng-container i18n>Merge as versions</ng-container>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1248,6 +1248,53 @@ describe('BulkEditorComponent', () => {
|
|||||||
expect(documentListViewService.selected.size).toEqual(0)
|
expect(documentListViewService.selected.size).toEqual(0)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should support merging documents as versions', () => {
|
||||||
|
let modal: NgbModalRef
|
||||||
|
modalService.activeInstances.subscribe((m) => (modal = m[0]))
|
||||||
|
jest.spyOn(permissionsService, 'currentUserCan').mockReturnValue(true)
|
||||||
|
jest
|
||||||
|
.spyOn(documentListViewService, 'documents', 'get')
|
||||||
|
.mockReturnValue([{ id: 3 }, { id: 4 }])
|
||||||
|
jest.spyOn(documentService, 'getFew').mockReturnValue(
|
||||||
|
of({
|
||||||
|
all: [3, 4],
|
||||||
|
count: 2,
|
||||||
|
results: [
|
||||||
|
{ id: 3, title: 'Document 3' },
|
||||||
|
{ id: 4, title: 'Document 4' },
|
||||||
|
],
|
||||||
|
})
|
||||||
|
)
|
||||||
|
jest
|
||||||
|
.spyOn(documentListViewService, 'selected', 'get')
|
||||||
|
.mockReturnValue(new Set([3, 4]))
|
||||||
|
jest
|
||||||
|
.spyOn(permissionsService, 'currentUserHasObjectPermissions')
|
||||||
|
.mockReturnValue(true)
|
||||||
|
jest
|
||||||
|
.spyOn(permissionsService, 'currentUserOwnsObject')
|
||||||
|
.mockReturnValue(true)
|
||||||
|
const mergeAsVersionsSpy = jest
|
||||||
|
.spyOn(documentService, 'mergeDocumentsAsVersions')
|
||||||
|
.mockReturnValue(of(true))
|
||||||
|
fixture.detectChanges()
|
||||||
|
|
||||||
|
component.mergeSelectedAsVersions()
|
||||||
|
expect(modal).not.toBeUndefined()
|
||||||
|
expect(modal.componentInstance.mergeAsVersions).toBe(true)
|
||||||
|
modal.componentInstance.rootDocumentID.set(4)
|
||||||
|
modal.componentInstance.confirm()
|
||||||
|
|
||||||
|
expect(mergeAsVersionsSpy).toHaveBeenCalledWith([3, 4], 4)
|
||||||
|
httpTestingController.match(
|
||||||
|
`${environment.apiBaseUrl}documents/?page=1&page_size=50&ordering=-created&truncate_content=true&include_selection_data=true`
|
||||||
|
)
|
||||||
|
httpTestingController.match(
|
||||||
|
`${environment.apiBaseUrl}documents/?page=1&page_size=100000&fields=id`
|
||||||
|
)
|
||||||
|
expect(documentListViewService.selected.size).toEqual(0)
|
||||||
|
})
|
||||||
|
|
||||||
it('should support bulk download with archive, originals or both and file formatting', () => {
|
it('should support bulk download with archive, originals or both and file formatting', () => {
|
||||||
jest.spyOn(permissionsService, 'currentUserCan').mockReturnValue(true)
|
jest.spyOn(permissionsService, 'currentUserCan').mockReturnValue(true)
|
||||||
jest
|
jest
|
||||||
|
|||||||
@@ -993,6 +993,34 @@ export class BulkEditorComponent
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mergeSelectedAsVersions() {
|
||||||
|
let modal = this.modalService.open(MergeConfirmDialogComponent, {
|
||||||
|
backdrop: 'static',
|
||||||
|
})
|
||||||
|
const mergeDialog = modal.componentInstance as MergeConfirmDialogComponent
|
||||||
|
const documentIDs = Array.from(this.list.selected)
|
||||||
|
mergeDialog.title = $localize`Merge as versions`
|
||||||
|
mergeDialog.message = $localize`The selected documents will become versions of the root document.`
|
||||||
|
mergeDialog.btnCaption = $localize`Proceed`
|
||||||
|
mergeDialog.mergeAsVersions = true
|
||||||
|
mergeDialog.documentIDs.set(documentIDs)
|
||||||
|
mergeDialog.rootDocumentID.set(documentIDs[0])
|
||||||
|
mergeDialog.confirmClicked
|
||||||
|
.pipe(takeUntil(this.unsubscribeNotifier))
|
||||||
|
.subscribe(() => {
|
||||||
|
mergeDialog.buttonsEnabled = false
|
||||||
|
this.executeDocumentAction(
|
||||||
|
modal,
|
||||||
|
this.documentService.mergeDocumentsAsVersions(
|
||||||
|
mergeDialog.documentIDs(),
|
||||||
|
mergeDialog.rootDocumentID()
|
||||||
|
),
|
||||||
|
{ deleteOriginals: true }
|
||||||
|
)
|
||||||
|
this.toastService.showInfo($localize`Documents merged as versions.`)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
public setCustomFieldValues(changedCustomFields: ChangedItems) {
|
public setCustomFieldValues(changedCustomFields: ChangedItems) {
|
||||||
const modal = this.modalService.open(CustomFieldsBulkEditDialogComponent, {
|
const modal = this.modalService.open(CustomFieldsBulkEditDialogComponent, {
|
||||||
backdrop: 'static',
|
backdrop: 'static',
|
||||||
|
|||||||
Reference in New Issue
Block a user