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> </div>
</app-page-header> </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="spinner-border spinner-border-sm fw-normal ms-2 me-auto" role="status"></div>
<div class="visually-hidden" i18n>Loading...</div> <div class="visually-hidden" i18n>Loading...</div>
</ng-container> </ng-container>
@ -62,21 +62,21 @@
<ul ngbNav #nav="ngbNav" [(activeId)]="activeTab" class="nav-tabs"> <ul ngbNav #nav="ngbNav" [(activeId)]="activeTab" class="nav-tabs">
<li ngbNavItem="incomplete"> <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-template ngbNavContent>
<ng-container [ngTemplateOutlet]="tasksTemplate" [ngTemplateOutletContext]="{tasks:tasksService.incomplete}"></ng-container> <ng-container [ngTemplateOutlet]="tasksTemplate" [ngTemplateOutletContext]="{tasks:tasksService.incompleteFileTasks}"></ng-container>
</ng-template> </ng-template>
</li> </li>
<li ngbNavItem="completed"> <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-template ngbNavContent>
<ng-container [ngTemplateOutlet]="tasksTemplate" [ngTemplateOutletContext]="{tasks:tasksService.completed}"></ng-container> <ng-container [ngTemplateOutlet]="tasksTemplate" [ngTemplateOutletContext]="{tasks:tasksService.completedFileTasks}"></ng-container>
</ng-template> </ng-template>
</li> </li>
<li ngbNavItem="failed"> <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-template ngbNavContent>
<ng-container [ngTemplateOutlet]="tasksTemplate" [ngTemplateOutletContext]="{tasks:tasksService.failed}"></ng-container> <ng-container [ngTemplateOutlet]="tasksTemplate" [ngTemplateOutletContext]="{tasks:tasksService.failedFileTasks}"></ng-container>
</ng-template> </ng-template>
</li> </li>
</ul> </ul>

View File

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

View File

@ -1,6 +1,22 @@
import { ObjectWithId } from './object-with-id' 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 { export interface PaperlessTask extends ObjectWithId {
type: PaperlessTaskType
status: PaperlessTaskStatus
acknowledged: boolean acknowledged: boolean
task_id: string task_id: string

View File

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