Update frontend for reworked tasks api endpoint

This commit is contained in:
Michael Shamoon 2022-05-23 15:38:53 -07:00
parent 0a06c291e2
commit aa999b34e2
4 changed files with 52 additions and 36 deletions

View File

@ -18,7 +18,7 @@
</div>
</app-page-header>
<ng-container *ngIf="!tasksService.completed && tasksService.loading">
<ng-container *ngIf="!tasksService.completedFileTasks && tasksService.loading">
<div class="spinner-border spinner-border-sm fw-normal ms-2 me-auto" role="status"></div>
<div class="visually-hidden" i18n>Loading...</div>
</ng-container>
@ -62,21 +62,21 @@
<ul ngbNav #nav="ngbNav" [(activeId)]="activeTab" class="nav-tabs">
<li ngbNavItem="incomplete">
<a ngbNavLink i18n>Incomplete&nbsp;<span class="badge bg-secondary ms-1">{{tasksService.incomplete.length}}</span></a>
<a ngbNavLink i18n>Incomplete&nbsp;<span class="badge bg-secondary ms-1">{{tasksService.incompleteFileTasks.length}}</span></a>
<ng-template ngbNavContent>
<ng-container [ngTemplateOutlet]="tasksTemplate" [ngTemplateOutletContext]="{tasks:tasksService.incomplete}"></ng-container>
<ng-container [ngTemplateOutlet]="tasksTemplate" [ngTemplateOutletContext]="{tasks:tasksService.incompleteFileTasks}"></ng-container>
</ng-template>
</li>
<li ngbNavItem="completed">
<a ngbNavLink i18n>Completed&nbsp;<span class="badge bg-secondary ms-1">{{tasksService.completed.length}}</span></a>
<a ngbNavLink i18n>Completed&nbsp;<span class="badge bg-secondary ms-1">{{tasksService.completedFileTasks.length}}</span></a>
<ng-template ngbNavContent>
<ng-container [ngTemplateOutlet]="tasksTemplate" [ngTemplateOutletContext]="{tasks:tasksService.completed}"></ng-container>
<ng-container [ngTemplateOutlet]="tasksTemplate" [ngTemplateOutletContext]="{tasks:tasksService.completedFileTasks}"></ng-container>
</ng-template>
</li>
<li ngbNavItem="failed">
<a ngbNavLink i18n>Failed&nbsp;<span class="badge bg-secondary ms-1">{{tasksService.failed.length}}</span></a>
<a ngbNavLink i18n>Failed&nbsp;<span class="badge bg-secondary ms-1">{{tasksService.failedFileTasks.length}}</span></a>
<ng-template ngbNavContent>
<ng-container [ngTemplateOutlet]="tasksTemplate" [ngTemplateOutletContext]="{tasks:tasksService.failed}"></ng-container>
<ng-container [ngTemplateOutlet]="tasksTemplate" [ngTemplateOutletContext]="{tasks:tasksService.failedFileTasks}"></ng-container>
</ng-template>
</li>
</ul>

View File

@ -34,9 +34,10 @@ export class TasksComponent implements OnInit, OnDestroy {
}
dismissTasks(task: PaperlessTask = undefined) {
this.tasksService.dismissTasks(
task ? new Set([task.id]) : this.selectedTasks
)
let tasks = task ? new Set([task.id]) : this.selectedTasks
if (this.selectedTasks.size == 0)
tasks = new Set(this.currentTasks.map((t) => t.id))
this.tasksService.dismissTasks(tasks)
}
toggleSelected(task: PaperlessTask) {
@ -49,13 +50,13 @@ export class TasksComponent implements OnInit, OnDestroy {
let tasks: PaperlessTask[]
switch (this.activeTab) {
case 'incomplete':
tasks = this.tasksService.incomplete
tasks = this.tasksService.incompleteFileTasks
break
case 'completed':
tasks = this.tasksService.completed
tasks = this.tasksService.completedFileTasks
break
case 'failed':
tasks = this.tasksService.failed
tasks = this.tasksService.failedFileTasks
break
default:
break

View File

@ -1,6 +1,22 @@
import { ObjectWithId } from './object-with-id'
export enum PaperlessTaskType {
// just file tasks, for now
File = 'file',
}
export enum PaperlessTaskStatus {
Incomplete = 'incomplete',
Complete = 'complete',
Failed = 'failed',
Unknown = 'unknown',
}
export interface PaperlessTask extends ObjectWithId {
type: PaperlessTaskType
status: PaperlessTaskStatus
acknowledged: boolean
task_id: string

View File

@ -1,16 +1,13 @@
import { HttpClient } from '@angular/common/http'
import { Injectable } from '@angular/core'
import { first, map } from 'rxjs/operators'
import { PaperlessTask } from 'src/app/data/paperless-task'
import {
PaperlessTask,
PaperlessTaskStatus,
PaperlessTaskType,
} from 'src/app/data/paperless-task'
import { environment } from 'src/environments/environment'
interface TasksAPIResponse {
total: number
incomplete: Array<PaperlessTask>
completed: Array<PaperlessTask>
failed: Array<PaperlessTask>
}
@Injectable({
providedIn: 'root',
})
@ -19,21 +16,26 @@ export class TasksService {
loading: boolean
public total: number
private fileTasks: PaperlessTask[] = []
private incompleteTasks: PaperlessTask[] = []
public get incomplete(): PaperlessTask[] {
return this.incompleteTasks
public get total(): number {
return this.fileTasks?.length
}
private completedTasks: PaperlessTask[] = []
public get completed(): PaperlessTask[] {
return this.completedTasks
public get incompleteFileTasks(): PaperlessTask[] {
return this.fileTasks.filter(
(t) => t.status == PaperlessTaskStatus.Incomplete
)
}
private failedTasks: PaperlessTask[] = []
public get failed(): PaperlessTask[] {
return this.failedTasks
public get completedFileTasks(): PaperlessTask[] {
return this.fileTasks.filter(
(t) => t.status == PaperlessTaskStatus.Complete
)
}
public get failedFileTasks(): PaperlessTask[] {
return this.fileTasks.filter((t) => t.status == PaperlessTaskStatus.Failed)
}
constructor(private http: HttpClient) {}
@ -42,13 +44,10 @@ export class TasksService {
this.loading = true
this.http
.get<TasksAPIResponse>(`${this.baseUrl}tasks/`)
.get<PaperlessTask[]>(`${this.baseUrl}tasks/`)
.pipe(first())
.subscribe((r) => {
this.total = r.total
this.incompleteTasks = r.incomplete
this.completedTasks = r.completed
this.failedTasks = r.failed
this.fileTasks = r.filter((t) => t.type == PaperlessTaskType.File) // they're all File tasks, for now
this.loading = false
return true
})