This commit is contained in:
shamoon
2026-04-20 22:40:36 -07:00
parent 1b984b7222
commit d8d8b18830
4 changed files with 50 additions and 91 deletions
@@ -56,7 +56,7 @@
<div ngbDropdown>
<button class="btn btn-sm btn-outline-primary me-3" ngbDropdownToggle>{{selectedTaskTypeLabel}}</button>
<div class="dropdown-menu shadow" ngbDropdownMenu>
<button ngbDropdownItem [class.active]="selectedTaskType === PaperlessTaskTypeFilter.All" (click)="setTaskType(PaperlessTaskTypeFilter.All)" i18n>All types</button>
<button ngbDropdownItem [class.active]="selectedTaskType === null" (click)="setTaskType(null)" i18n>All types</button>
@for (option of taskTypeOptions; track option.value) {
<button ngbDropdownItem [class.active]="selectedTaskType === option.value" [disabled]="isTaskTypeOptionDisabled(option.value)" (click)="setTaskType(option.value)">{{option.label}}</button>
}
@@ -65,7 +65,7 @@
<div ngbDropdown>
<button class="btn btn-sm btn-outline-primary me-3" ngbDropdownToggle>{{selectedTriggerSourceLabel}}</button>
<div class="dropdown-menu shadow" ngbDropdownMenu>
<button ngbDropdownItem [class.active]="selectedTriggerSource === PaperlessTaskTriggerSourceFilter.All" (click)="setTriggerSource(PaperlessTaskTriggerSourceFilter.All)" i18n>All sources</button>
<button ngbDropdownItem [class.active]="selectedTriggerSource === null" (click)="setTriggerSource(null)" i18n>All sources</button>
@for (option of triggerSourceOptions; track option.value) {
<button ngbDropdownItem [class.active]="selectedTriggerSource === option.value" [disabled]="isTriggerSourceOptionDisabled(option.value)" (click)="setTriggerSource(option.value)">{{option.label}}</button>
}
@@ -17,9 +17,7 @@ import {
PaperlessTask,
PaperlessTaskStatus,
PaperlessTaskTriggerSource,
PaperlessTaskTriggerSourceFilter,
PaperlessTaskType,
PaperlessTaskTypeFilter,
} from 'src/app/data/paperless-task'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { PermissionsGuard } from 'src/app/guards/permissions.guard'
@@ -205,10 +203,8 @@ describe('TasksComponent', () => {
it('should display task sections with counts', () => {
expect(component.selectedSection).toBe(TaskSection.All)
expect(component.selectedTaskType).toBe(PaperlessTaskTypeFilter.All)
expect(component.selectedTriggerSource).toBe(
PaperlessTaskTriggerSourceFilter.All
)
expect(component.selectedTaskType).toBeNull()
expect(component.selectedTriggerSource).toBeNull()
fixture.detectChanges()
@@ -264,10 +260,8 @@ describe('TasksComponent', () => {
component.resetFilters()
expect(component.selectedSection).toBe(TaskSection.InProgress)
expect(component.selectedTaskType).toBe(PaperlessTaskTypeFilter.All)
expect(component.selectedTriggerSource).toBe(
PaperlessTaskTriggerSourceFilter.All
)
expect(component.selectedTaskType).toBeNull()
expect(component.selectedTriggerSource).toBeNull()
expect(component.filterText).toBe('')
expect(component.isFiltered).toBe(false)
})
@@ -21,8 +21,8 @@ import {
import {
PaperlessTask,
PaperlessTaskStatus,
PaperlessTaskTriggerSourceFilter,
PaperlessTaskTypeFilter,
PaperlessTaskTriggerSource,
PaperlessTaskType,
} from 'src/app/data/paperless-task'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
@@ -57,72 +57,72 @@ const SECTION_LABELS = {
}
const TASK_TYPE_OPTIONS: Array<{
value: PaperlessTaskTypeFilter
value: PaperlessTaskType
label: string
}> = [
{
value: PaperlessTaskTypeFilter.ConsumeFile,
value: PaperlessTaskType.ConsumeFile,
label: $localize`Consume File`,
},
{
value: PaperlessTaskTypeFilter.TrainClassifier,
value: PaperlessTaskType.TrainClassifier,
label: $localize`Train Classifier`,
},
{
value: PaperlessTaskTypeFilter.SanityCheck,
value: PaperlessTaskType.SanityCheck,
label: $localize`Sanity Check`,
},
{ value: PaperlessTaskTypeFilter.MailFetch, label: $localize`Mail Fetch` },
{ value: PaperlessTaskTypeFilter.LlmIndex, label: $localize`LLM Index` },
{ value: PaperlessTaskType.MailFetch, label: $localize`Mail Fetch` },
{ value: PaperlessTaskType.LlmIndex, label: $localize`LLM Index` },
{
value: PaperlessTaskTypeFilter.EmptyTrash,
value: PaperlessTaskType.EmptyTrash,
label: $localize`Empty Trash`,
},
{
value: PaperlessTaskTypeFilter.CheckWorkflows,
value: PaperlessTaskType.CheckWorkflows,
label: $localize`Check Workflows`,
},
{
value: PaperlessTaskTypeFilter.BulkUpdate,
value: PaperlessTaskType.BulkUpdate,
label: $localize`Bulk Update`,
},
{
value: PaperlessTaskTypeFilter.ReprocessDocument,
value: PaperlessTaskType.ReprocessDocument,
label: $localize`Reprocess Document`,
},
{
value: PaperlessTaskTypeFilter.BuildShareLink,
value: PaperlessTaskType.BuildShareLink,
label: $localize`Build Share Link`,
},
{
value: PaperlessTaskTypeFilter.BulkDelete,
value: PaperlessTaskType.BulkDelete,
label: $localize`Bulk Delete`,
},
]
const TRIGGER_SOURCE_OPTIONS: Array<{
value: PaperlessTaskTriggerSourceFilter
value: PaperlessTaskTriggerSource
label: string
}> = [
{
value: PaperlessTaskTriggerSourceFilter.Scheduled,
value: PaperlessTaskTriggerSource.Scheduled,
label: $localize`Scheduled`,
},
{ value: PaperlessTaskTriggerSourceFilter.WebUI, label: $localize`Web UI` },
{ value: PaperlessTaskTriggerSource.WebUI, label: $localize`Web UI` },
{
value: PaperlessTaskTriggerSourceFilter.ApiUpload,
value: PaperlessTaskTriggerSource.ApiUpload,
label: $localize`API Upload`,
},
{
value: PaperlessTaskTriggerSourceFilter.FolderConsume,
value: PaperlessTaskTriggerSource.FolderConsume,
label: $localize`Folder Consume`,
},
{
value: PaperlessTaskTriggerSourceFilter.EmailConsume,
value: PaperlessTaskTriggerSource.EmailConsume,
label: $localize`Email Consume`,
},
{ value: PaperlessTaskTriggerSourceFilter.System, label: $localize`System` },
{ value: PaperlessTaskTriggerSourceFilter.Manual, label: $localize`Manual` },
{ value: PaperlessTaskTriggerSource.System, label: $localize`System` },
{ value: PaperlessTaskTriggerSource.Manual, label: $localize`Manual` },
]
@Component({
@@ -153,8 +153,6 @@ export class TasksComponent
private readonly toastService = inject(ToastService)
readonly TaskSection = TaskSection
readonly PaperlessTaskTypeFilter = PaperlessTaskTypeFilter
readonly PaperlessTaskTriggerSourceFilter = PaperlessTaskTriggerSourceFilter
readonly sections = [
TaskSection.NeedsAttention,
TaskSection.InProgress,
@@ -164,9 +162,8 @@ export class TasksComponent
public expandedTask: number
public autoRefreshEnabled: boolean = true
public selectedSection: TaskSection = TaskSection.All
public selectedTaskType: PaperlessTaskTypeFilter = PaperlessTaskTypeFilter.All
public selectedTriggerSource: PaperlessTaskTriggerSourceFilter =
PaperlessTaskTriggerSourceFilter.All
public selectedTaskType: PaperlessTaskType | null = null
public selectedTriggerSource: PaperlessTaskTriggerSource | null = null
private _filterText: string = ''
get filterText() {
@@ -187,21 +184,21 @@ export class TasksComponent
}
public get taskTypeOptions(): Array<{
value: PaperlessTaskTypeFilter
value: PaperlessTaskType
label: string
}> {
return TASK_TYPE_OPTIONS
}
public get triggerSourceOptions(): Array<{
value: PaperlessTaskTriggerSourceFilter
value: PaperlessTaskTriggerSource
label: string
}> {
return TRIGGER_SOURCE_OPTIONS
}
public get selectedTaskTypeLabel(): string {
if (this.selectedTaskType === PaperlessTaskTypeFilter.All) {
if (this.selectedTaskType === null) {
return $localize`All types`
}
@@ -213,7 +210,7 @@ export class TasksComponent
}
public get selectedTriggerSourceLabel(): string {
if (this.selectedTriggerSource === PaperlessTaskTriggerSourceFilter.All) {
if (this.selectedTriggerSource === null) {
return $localize`All sources`
}
@@ -249,8 +246,8 @@ export class TasksComponent
get isFiltered(): boolean {
return (
this.selectedTaskType !== PaperlessTaskTypeFilter.All ||
this.selectedTriggerSource !== PaperlessTaskTriggerSourceFilter.All ||
this.selectedTaskType !== null ||
this.selectedTriggerSource !== null ||
this._filterText.length > 0
)
}
@@ -437,32 +434,32 @@ export class TasksComponent
this.clearSelection()
}
setTaskType(taskType: PaperlessTaskTypeFilter) {
setTaskType(taskType: PaperlessTaskType | null) {
this.selectedTaskType = taskType
this.clearSelection()
}
setTriggerSource(triggerSource: PaperlessTaskTriggerSourceFilter) {
setTriggerSource(triggerSource: PaperlessTaskTriggerSource | null) {
this.selectedTriggerSource = triggerSource
this.clearSelection()
}
taskTypeOptionCount(taskType: PaperlessTaskTypeFilter): number {
taskTypeOptionCount(taskType: PaperlessTaskType | null): number {
return this.tasksForOptionCounts({ taskType }).length
}
triggerSourceOptionCount(
triggerSource: PaperlessTaskTriggerSourceFilter
triggerSource: PaperlessTaskTriggerSource | null
): number {
return this.tasksForOptionCounts({ triggerSource }).length
}
isTaskTypeOptionDisabled(taskType: PaperlessTaskTypeFilter): boolean {
isTaskTypeOptionDisabled(taskType: PaperlessTaskType | null): boolean {
return this.taskTypeOptionCount(taskType) === 0
}
isTriggerSourceOptionDisabled(
triggerSource: PaperlessTaskTriggerSourceFilter
triggerSource: PaperlessTaskTriggerSource | null
): boolean {
return this.triggerSourceOptionCount(triggerSource) === 0
}
@@ -476,8 +473,8 @@ export class TasksComponent
}
public resetFilters() {
this.selectedTaskType = PaperlessTaskTypeFilter.All
this.selectedTriggerSource = PaperlessTaskTriggerSourceFilter.All
this.selectedTaskType = null
this.selectedTriggerSource = null
this.resetFilter()
this.clearSelection()
}
@@ -523,21 +520,15 @@ export class TasksComponent
taskType,
triggerSource,
}: {
taskType: PaperlessTaskTypeFilter
triggerSource: PaperlessTaskTriggerSourceFilter
taskType: PaperlessTaskType | null
triggerSource: PaperlessTaskTriggerSource | null
}
): boolean {
if (
taskType !== PaperlessTaskTypeFilter.All &&
task.task_type !== taskType
) {
if (taskType !== null && task.task_type !== taskType) {
return false
}
if (
triggerSource !== PaperlessTaskTriggerSourceFilter.All &&
task.trigger_source !== triggerSource
) {
if (triggerSource !== null && task.trigger_source !== triggerSource) {
return false
}
@@ -564,8 +555,8 @@ export class TasksComponent
taskType = this.selectedTaskType,
triggerSource = this.selectedTriggerSource,
}: {
taskType?: PaperlessTaskTypeFilter
triggerSource?: PaperlessTaskTriggerSourceFilter
taskType?: PaperlessTaskType | null
triggerSource?: PaperlessTaskTriggerSource | null
}): PaperlessTask[] {
const sections =
this.selectedSection === TaskSection.All
-26
View File
@@ -14,21 +14,6 @@ export enum PaperlessTaskType {
BulkDelete = 'bulk_delete',
}
export enum PaperlessTaskTypeFilter {
All = 'all',
ConsumeFile = PaperlessTaskType.ConsumeFile,
TrainClassifier = PaperlessTaskType.TrainClassifier,
SanityCheck = PaperlessTaskType.SanityCheck,
MailFetch = PaperlessTaskType.MailFetch,
LlmIndex = PaperlessTaskType.LlmIndex,
EmptyTrash = PaperlessTaskType.EmptyTrash,
CheckWorkflows = PaperlessTaskType.CheckWorkflows,
BulkUpdate = PaperlessTaskType.BulkUpdate,
ReprocessDocument = PaperlessTaskType.ReprocessDocument,
BuildShareLink = PaperlessTaskType.BuildShareLink,
BulkDelete = PaperlessTaskType.BulkDelete,
}
export enum PaperlessTaskTriggerSource {
Scheduled = 'scheduled',
WebUI = 'web_ui',
@@ -39,17 +24,6 @@ export enum PaperlessTaskTriggerSource {
Manual = 'manual',
}
export enum PaperlessTaskTriggerSourceFilter {
All = 'all',
Scheduled = PaperlessTaskTriggerSource.Scheduled,
WebUI = PaperlessTaskTriggerSource.WebUI,
ApiUpload = PaperlessTaskTriggerSource.ApiUpload,
FolderConsume = PaperlessTaskTriggerSource.FolderConsume,
EmailConsume = PaperlessTaskTriggerSource.EmailConsume,
System = PaperlessTaskTriggerSource.System,
Manual = PaperlessTaskTriggerSource.Manual,
}
export enum PaperlessTaskStatus {
Pending = 'pending',
Started = 'started',