From 57e04f614d55c5d8ffad8dac3190ee13cb85b605 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 14 Mar 2026 22:03:50 -0700 Subject: [PATCH] Pass the all / filters from document service --- .../services/rest/document.service.spec.ts | 35 ++++++++++++++++--- .../src/app/services/rest/document.service.ts | 30 ++++++++++------ 2 files changed, 50 insertions(+), 15 deletions(-) diff --git a/src-ui/src/app/services/rest/document.service.spec.ts b/src-ui/src/app/services/rest/document.service.spec.ts index b3a9757ff..711aab743 100644 --- a/src-ui/src/app/services/rest/document.service.spec.ts +++ b/src-ui/src/app/services/rest/document.service.spec.ts @@ -198,7 +198,7 @@ describe(`DocumentService`, () => { const content = 'both' const useFilenameFormatting = false subscription = service - .bulkDownload(ids, content, useFilenameFormatting) + .bulkDownload({ documents: ids }, content, useFilenameFormatting) .subscribe() const req = httpTestingController.expectOne( `${environment.apiBaseUrl}${endpoint}/bulk_download/` @@ -218,7 +218,9 @@ describe(`DocumentService`, () => { add_tags: [15], remove_tags: [6], } - subscription = service.bulkEdit(ids, method, parameters).subscribe() + subscription = service + .bulkEdit({ documents: ids }, method, parameters) + .subscribe() const req = httpTestingController.expectOne( `${environment.apiBaseUrl}${endpoint}/bulk_edit/` ) @@ -230,9 +232,32 @@ describe(`DocumentService`, () => { }) }) + it('should call appropriate api endpoint for bulk edit with all and filters', () => { + const method = 'modify_tags' + const parameters = { + add_tags: [15], + remove_tags: [6], + } + const selection = { + all: true, + filters: { title__icontains: 'apple' }, + } + subscription = service.bulkEdit(selection, method, parameters).subscribe() + const req = httpTestingController.expectOne( + `${environment.apiBaseUrl}${endpoint}/bulk_edit/` + ) + expect(req.request.method).toEqual('POST') + expect(req.request.body).toEqual({ + all: true, + filters: { title__icontains: 'apple' }, + method, + parameters, + }) + }) + it('should call appropriate api endpoint for delete documents', () => { const ids = [1, 2, 3] - subscription = service.deleteDocuments(ids).subscribe() + subscription = service.deleteDocuments({ documents: ids }).subscribe() const req = httpTestingController.expectOne( `${environment.apiBaseUrl}${endpoint}/delete/` ) @@ -244,7 +269,7 @@ describe(`DocumentService`, () => { it('should call appropriate api endpoint for reprocess documents', () => { const ids = [1, 2, 3] - subscription = service.reprocessDocuments(ids).subscribe() + subscription = service.reprocessDocuments({ documents: ids }).subscribe() const req = httpTestingController.expectOne( `${environment.apiBaseUrl}${endpoint}/reprocess/` ) @@ -256,7 +281,7 @@ describe(`DocumentService`, () => { it('should call appropriate api endpoint for rotate documents', () => { const ids = [1, 2, 3] - subscription = service.rotateDocuments(ids, 90).subscribe() + subscription = service.rotateDocuments({ documents: ids }, 90).subscribe() const req = httpTestingController.expectOne( `${environment.apiBaseUrl}${endpoint}/rotate/` ) diff --git a/src-ui/src/app/services/rest/document.service.ts b/src-ui/src/app/services/rest/document.service.ts index 203b35341..cfee4c405 100644 --- a/src-ui/src/app/services/rest/document.service.ts +++ b/src-ui/src/app/services/rest/document.service.ts @@ -68,6 +68,12 @@ export interface RemovePasswordDocumentsRequest { source_mode?: BulkEditSourceMode } +export interface DocumentSelectionQuery { + documents?: number[] + all?: boolean + filters?: { [key: string]: any } +} + @Injectable({ providedIn: 'root', }) @@ -325,33 +331,37 @@ export class DocumentService extends AbstractPaperlessService { return this.http.get(url.toString()) } - bulkEdit(ids: number[], method: DocumentBulkEditMethod, args: any) { + bulkEdit( + selection: DocumentSelectionQuery, + method: DocumentBulkEditMethod, + args: any + ) { return this.http.post(this.getResourceUrl(null, 'bulk_edit'), { - documents: ids, + ...selection, method: method, parameters: args, }) } - deleteDocuments(ids: number[]) { + deleteDocuments(selection: DocumentSelectionQuery) { return this.http.post(this.getResourceUrl(null, 'delete'), { - documents: ids, + ...selection, }) } - reprocessDocuments(ids: number[]) { + reprocessDocuments(selection: DocumentSelectionQuery) { return this.http.post(this.getResourceUrl(null, 'reprocess'), { - documents: ids, + ...selection, }) } rotateDocuments( - ids: number[], + selection: DocumentSelectionQuery, degrees: number, sourceMode: BulkEditSourceMode = BulkEditSourceMode.LATEST_VERSION ) { return this.http.post(this.getResourceUrl(null, 'rotate'), { - documents: ids, + ...selection, degrees, source_mode: sourceMode, }) @@ -399,14 +409,14 @@ export class DocumentService extends AbstractPaperlessService { } bulkDownload( - ids: number[], + selection: DocumentSelectionQuery, content = 'both', useFilenameFormatting: boolean = false ) { return this.http.post( this.getResourceUrl(null, 'bulk_download'), { - documents: ids, + ...selection, content: content, follow_formatting: useFilenameFormatting, },