From f4dca6a1908af63c68c6e714129f287d72a99d5b Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 6 Jun 2026 16:17:37 -0700 Subject: [PATCH] Frontend task service support the counts endpoint --- src-ui/src/app/data/paperless-task.ts | 7 +++++ src-ui/src/app/services/tasks.service.spec.ts | 30 +++++++++++++++++++ src-ui/src/app/services/tasks.service.ts | 12 ++++++++ 3 files changed, 49 insertions(+) diff --git a/src-ui/src/app/data/paperless-task.ts b/src-ui/src/app/data/paperless-task.ts index 53aba0edd..ca64918c4 100644 --- a/src-ui/src/app/data/paperless-task.ts +++ b/src-ui/src/app/data/paperless-task.ts @@ -64,3 +64,10 @@ export interface PaperlessTaskSummary { last_success: Date | null last_failure: Date | null } + +export interface PaperlessTaskStatusCounts { + all: number + needs_attention: number + in_progress: number + completed: number +} diff --git a/src-ui/src/app/services/tasks.service.spec.ts b/src-ui/src/app/services/tasks.service.spec.ts index 3cc35232d..d9f8cb47d 100644 --- a/src-ui/src/app/services/tasks.service.spec.ts +++ b/src-ui/src/app/services/tasks.service.spec.ts @@ -221,4 +221,34 @@ describe('TasksService', () => { task_id: 'abc-123', }) }) + + it('loads filtered task status counts', () => { + tasksService + .statusCounts({ + acknowledged: false, + task_type: PaperlessTaskType.ConsumeFile, + }) + .subscribe((res) => { + expect(res).toEqual({ + all: 10, + needs_attention: 2, + in_progress: 3, + completed: 5, + }) + }) + + const req = httpTestingController.expectOne( + (req: HttpRequest) => + req.url === `${environment.apiBaseUrl}tasks/status_counts/` && + req.params.get('acknowledged') === 'false' && + req.params.get('task_type') === PaperlessTaskType.ConsumeFile + ) + expect(req.request.method).toEqual('GET') + req.flush({ + all: 10, + needs_attention: 2, + in_progress: 3, + completed: 5, + }) + }) }) diff --git a/src-ui/src/app/services/tasks.service.ts b/src-ui/src/app/services/tasks.service.ts index 38e272916..2e9644218 100644 --- a/src-ui/src/app/services/tasks.service.ts +++ b/src-ui/src/app/services/tasks.service.ts @@ -5,6 +5,7 @@ import { first, map, takeUntil, tap } from 'rxjs/operators' import { PaperlessTask, PaperlessTaskStatus, + PaperlessTaskStatusCounts, PaperlessTaskType, } from 'src/app/data/paperless-task' import { Results } from 'src/app/data/results' @@ -102,6 +103,17 @@ export class TasksService { ) } + public statusCounts( + extraParams?: Record + ): Observable { + return this.http.get( + `${this.baseUrl}${this.endpoint}/status_counts/`, + { + params: extraParams, + } + ) + } + public dismissTasks(task_ids: Set): Observable { return this.http .post(`${this.baseUrl}tasks/acknowledge/`, {