Refactor frontend data models

This commit is contained in:
shamoon
2023-12-19 22:36:35 -08:00
parent 021189573b
commit 9a15843b3b
120 changed files with 640 additions and 706 deletions

View File

@@ -11,8 +11,8 @@ import {
import { of, throwError } from 'rxjs'
import {
DocumentSource,
PaperlessConsumptionTemplate,
} from 'src/app/data/paperless-consumption-template'
ConsumptionTemplate,
} from 'src/app/data/consumption-template'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { ConsumptionTemplateService } from 'src/app/services/rest/consumption-template.service'
import { ToastService } from 'src/app/services/toast.service'
@@ -22,7 +22,7 @@ import { ConsumptionTemplatesComponent } from './consumption-templates.component
import { ConsumptionTemplateEditDialogComponent } from '../../common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component'
import { PermissionsService } from 'src/app/services/permissions.service'
const templates: PaperlessConsumptionTemplate[] = [
const templates: ConsumptionTemplate[] = [
{
id: 0,
name: 'Template 1',

View File

@@ -2,7 +2,7 @@ import { Component, OnInit } from '@angular/core'
import { ConsumptionTemplateService } from 'src/app/services/rest/consumption-template.service'
import { ComponentWithPermissions } from '../../with-permissions/with-permissions.component'
import { Subject, takeUntil } from 'rxjs'
import { PaperlessConsumptionTemplate } from 'src/app/data/paperless-consumption-template'
import { ConsumptionTemplate } from 'src/app/data/consumption-template'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { ToastService } from 'src/app/services/toast.service'
import { PermissionsService } from 'src/app/services/permissions.service'
@@ -22,7 +22,7 @@ export class ConsumptionTemplatesComponent
extends ComponentWithPermissions
implements OnInit
{
public templates: PaperlessConsumptionTemplate[] = []
public templates: ConsumptionTemplate[] = []
private unsubscribeNotifier: Subject<any> = new Subject()
@@ -48,13 +48,13 @@ export class ConsumptionTemplatesComponent
})
}
getSourceList(template: PaperlessConsumptionTemplate): string {
getSourceList(template: ConsumptionTemplate): string {
return template.sources
.map((id) => DOCUMENT_SOURCE_OPTIONS.find((s) => s.id === id).name)
.join(', ')
}
editTemplate(rule: PaperlessConsumptionTemplate) {
editTemplate(rule: ConsumptionTemplate) {
const modal = this.modalService.open(
ConsumptionTemplateEditDialogComponent,
{
@@ -82,7 +82,7 @@ export class ConsumptionTemplatesComponent
})
}
deleteTemplate(rule: PaperlessConsumptionTemplate) {
deleteTemplate(rule: ConsumptionTemplate) {
const modal = this.modalService.open(ConfirmDialogComponent, {
backdrop: 'static',
})

View File

@@ -1,7 +1,7 @@
import { Component } from '@angular/core'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { FILTER_HAS_CORRESPONDENT_ANY } from 'src/app/data/filter-rule-type'
import { PaperlessCorrespondent } from 'src/app/data/paperless-correspondent'
import { Correspondent } from 'src/app/data/correspondent'
import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
import { DocumentListViewService } from 'src/app/services/document-list-view.service'
import {
@@ -19,7 +19,7 @@ import { ManagementListComponent } from '../management-list/management-list.comp
styleUrls: ['./../management-list/management-list.component.scss'],
providers: [{ provide: CustomDatePipe }],
})
export class CorrespondentListComponent extends ManagementListComponent<PaperlessCorrespondent> {
export class CorrespondentListComponent extends ManagementListComponent<Correspondent> {
constructor(
correspondentsService: CorrespondentService,
modalService: NgbModal,
@@ -43,7 +43,7 @@ export class CorrespondentListComponent extends ManagementListComponent<Paperles
{
key: 'last_correspondence',
name: $localize`Last used`,
valueFn: (c: PaperlessCorrespondent) => {
valueFn: (c: Correspondent) => {
if (c.last_correspondence) {
let date = new Date(c.last_correspondence)
if (date.toString() == 'Invalid Date') {
@@ -63,7 +63,7 @@ export class CorrespondentListComponent extends ManagementListComponent<Paperles
)
}
getDeleteMessage(object: PaperlessCorrespondent) {
getDeleteMessage(object: Correspondent) {
return $localize`Do you really want to delete the correspondent "${object.name}"?`
}
}

View File

@@ -1,10 +1,7 @@
import { ComponentFixture, TestBed } from '@angular/core/testing'
import { CustomFieldsComponent } from './custom-fields.component'
import {
PaperlessCustomField,
PaperlessCustomFieldDataType,
} from 'src/app/data/paperless-custom-field'
import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field'
import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
import { HttpClientTestingModule } from '@angular/common/http/testing'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
@@ -23,16 +20,16 @@ import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dial
import { PageHeaderComponent } from '../../common/page-header/page-header.component'
import { CustomFieldEditDialogComponent } from '../../common/edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component'
const fields: PaperlessCustomField[] = [
const fields: CustomField[] = [
{
id: 0,
name: 'Field 1',
data_type: PaperlessCustomFieldDataType.String,
data_type: CustomFieldDataType.String,
},
{
id: 1,
name: 'Field 2',
data_type: PaperlessCustomFieldDataType.Integer,
data_type: CustomFieldDataType.Integer,
},
]

View File

@@ -1,10 +1,7 @@
import { Component, OnInit } from '@angular/core'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { Subject, takeUntil } from 'rxjs'
import {
DATA_TYPE_LABELS,
PaperlessCustomField,
} from 'src/app/data/paperless-custom-field'
import { DATA_TYPE_LABELS, CustomField } from 'src/app/data/custom-field'
import { PermissionsService } from 'src/app/services/permissions.service'
import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
import { ToastService } from 'src/app/services/toast.service'
@@ -22,7 +19,7 @@ export class CustomFieldsComponent
extends ComponentWithPermissions
implements OnInit
{
public fields: PaperlessCustomField[] = []
public fields: CustomField[] = []
private unsubscribeNotifier: Subject<any> = new Subject()
constructor(
@@ -47,7 +44,7 @@ export class CustomFieldsComponent
})
}
editField(field: PaperlessCustomField) {
editField(field: CustomField) {
const modal = this.modalService.open(CustomFieldEditDialogComponent)
modal.componentInstance.dialogMode = field
? EditDialogMode.EDIT
@@ -67,7 +64,7 @@ export class CustomFieldsComponent
})
}
deleteField(field: PaperlessCustomField) {
deleteField(field: CustomField) {
const modal = this.modalService.open(ConfirmDialogComponent, {
backdrop: 'static',
})
@@ -92,7 +89,7 @@ export class CustomFieldsComponent
})
}
getDataType(field: PaperlessCustomField): string {
getDataType(field: CustomField): string {
return DATA_TYPE_LABELS.find((l) => l.id === field.data_type).name
}
}

View File

@@ -1,7 +1,7 @@
import { Component } from '@angular/core'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { FILTER_HAS_DOCUMENT_TYPE_ANY } from 'src/app/data/filter-rule-type'
import { PaperlessDocumentType } from 'src/app/data/paperless-document-type'
import { DocumentType } from 'src/app/data/document-type'
import { DocumentListViewService } from 'src/app/services/document-list-view.service'
import {
PermissionsService,
@@ -17,7 +17,7 @@ import { ManagementListComponent } from '../management-list/management-list.comp
templateUrl: './../management-list/management-list.component.html',
styleUrls: ['./../management-list/management-list.component.scss'],
})
export class DocumentTypeListComponent extends ManagementListComponent<PaperlessDocumentType> {
export class DocumentTypeListComponent extends ManagementListComponent<DocumentType> {
constructor(
documentTypeService: DocumentTypeService,
modalService: NgbModal,
@@ -40,7 +40,7 @@ export class DocumentTypeListComponent extends ManagementListComponent<Paperless
)
}
getDeleteMessage(object: PaperlessDocumentType) {
getDeleteMessage(object: DocumentType) {
return $localize`Do you really want to delete the document type "${object.name}"?`
}
}

View File

@@ -13,8 +13,8 @@ import {
import { NgSelectModule } from '@ng-select/ng-select'
import { of, throwError } from 'rxjs'
import { routes } from 'src/app/app-routing.module'
import { PaperlessMailAccount } from 'src/app/data/paperless-mail-account'
import { PaperlessMailRule } from 'src/app/data/paperless-mail-rule'
import { MailAccount } from 'src/app/data/mail-account'
import { MailRule } from 'src/app/data/mail-rule'
import { IfOwnerDirective } from 'src/app/directives/if-owner.directive'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { PermissionsGuard } from 'src/app/guards/permissions.guard'
@@ -118,7 +118,7 @@ describe('MailComponent', () => {
of({
all: mailAccounts.map((a) => a.id),
count: mailAccounts.length,
results: (mailAccounts as PaperlessMailAccount[]).concat([]),
results: (mailAccounts as MailAccount[]).concat([]),
})
)
}
@@ -127,7 +127,7 @@ describe('MailComponent', () => {
of({
all: mailRules.map((r) => r.id),
count: mailRules.length,
results: (mailRules as PaperlessMailRule[]).concat([]),
results: (mailRules as MailRule[]).concat([]),
})
)
}
@@ -163,7 +163,7 @@ describe('MailComponent', () => {
completeSetup()
let modal: NgbModalRef
modalService.activeInstances.subscribe((refs) => (modal = refs[0]))
component.editMailAccount(mailAccounts[0] as PaperlessMailAccount)
component.editMailAccount(mailAccounts[0] as MailAccount)
let editDialog = modal.componentInstance as MailAccountEditDialogComponent
const toastErrorSpy = jest.spyOn(toastService, 'showError')
const toastInfoSpy = jest.spyOn(toastService, 'showInfo')
@@ -181,7 +181,7 @@ describe('MailComponent', () => {
completeSetup()
let modal: NgbModalRef
modalService.activeInstances.subscribe((refs) => (modal = refs[0]))
component.deleteMailAccount(mailAccounts[0] as PaperlessMailAccount)
component.deleteMailAccount(mailAccounts[0] as MailAccount)
const deleteDialog = modal.componentInstance as ConfirmDialogComponent
const deleteSpy = jest.spyOn(mailAccountService, 'delete')
const toastErrorSpy = jest.spyOn(toastService, 'showError')
@@ -202,7 +202,7 @@ describe('MailComponent', () => {
completeSetup()
let modal: NgbModalRef
modalService.activeInstances.subscribe((refs) => (modal = refs[0]))
component.editMailRule(mailRules[0] as PaperlessMailRule)
component.editMailRule(mailRules[0] as MailRule)
const editDialog = modal.componentInstance as MailRuleEditDialogComponent
const toastErrorSpy = jest.spyOn(toastService, 'showError')
const toastInfoSpy = jest.spyOn(toastService, 'showInfo')
@@ -220,7 +220,7 @@ describe('MailComponent', () => {
completeSetup()
let modal: NgbModalRef
modalService.activeInstances.subscribe((refs) => (modal = refs[0]))
component.deleteMailRule(mailRules[0] as PaperlessMailRule)
component.deleteMailRule(mailRules[0] as MailRule)
const deleteDialog = modal.componentInstance as ConfirmDialogComponent
const deleteSpy = jest.spyOn(mailRuleService, 'delete')
const toastErrorSpy = jest.spyOn(toastService, 'showError')
@@ -257,7 +257,7 @@ describe('MailComponent', () => {
const toastErrorSpy = jest.spyOn(toastService, 'showError')
const toastInfoSpy = jest.spyOn(toastService, 'showInfo')
const rulePatchSpy = jest.spyOn(mailRuleService, 'patch')
component.editPermissions(mailRules[0] as PaperlessMailRule)
component.editPermissions(mailRules[0] as MailRule)
expect(modal).not.toBeUndefined()
let dialog = modal.componentInstance as PermissionsDialogComponent
expect(dialog.object).toEqual(mailRules[0])
@@ -268,7 +268,7 @@ describe('MailComponent', () => {
dialog.confirmClicked.emit(perms)
expect(rulePatchSpy).toHaveBeenCalled()
expect(toastErrorSpy).toHaveBeenCalled()
rulePatchSpy.mockReturnValueOnce(of(mailRules[0] as PaperlessMailRule))
rulePatchSpy.mockReturnValueOnce(of(mailRules[0] as MailRule))
dialog.confirmClicked.emit(perms)
expect(toastInfoSpy).toHaveBeenCalledWith('Permissions updated')
@@ -293,7 +293,7 @@ describe('MailComponent', () => {
let modal: NgbModalRef
modalService.activeInstances.subscribe((refs) => (modal = refs[0]))
const accountPatchSpy = jest.spyOn(mailAccountService, 'patch')
component.editPermissions(mailAccounts[0] as PaperlessMailAccount)
component.editPermissions(mailAccounts[0] as MailAccount)
expect(modal).not.toBeUndefined()
let dialog = modal.componentInstance as PermissionsDialogComponent
expect(dialog.object).toEqual(mailAccounts[0])

View File

@@ -2,8 +2,8 @@ import { Component, OnInit, OnDestroy } from '@angular/core'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { Subject, first, takeUntil } from 'rxjs'
import { ObjectWithPermissions } from 'src/app/data/object-with-permissions'
import { PaperlessMailAccount } from 'src/app/data/paperless-mail-account'
import { PaperlessMailRule } from 'src/app/data/paperless-mail-rule'
import { MailAccount } from 'src/app/data/mail-account'
import { MailRule } from 'src/app/data/mail-rule'
import {
PermissionsService,
PermissionAction,
@@ -28,8 +28,8 @@ export class MailComponent
extends ComponentWithPermissions
implements OnInit, OnDestroy
{
mailAccounts: PaperlessMailAccount[] = []
mailRules: PaperlessMailRule[] = []
mailAccounts: MailAccount[] = []
mailRules: MailRule[] = []
unsubscribeNotifier: Subject<any> = new Subject()
@@ -76,7 +76,7 @@ export class MailComponent
this.unsubscribeNotifier.next(true)
}
editMailAccount(account: PaperlessMailAccount = null) {
editMailAccount(account: MailAccount = null) {
const modal = this.modalService.open(MailAccountEditDialogComponent, {
backdrop: 'static',
size: 'xl',
@@ -105,7 +105,7 @@ export class MailComponent
})
}
deleteMailAccount(account: PaperlessMailAccount) {
deleteMailAccount(account: MailAccount) {
const modal = this.modalService.open(ConfirmDialogComponent, {
backdrop: 'static',
})
@@ -137,7 +137,7 @@ export class MailComponent
})
}
editMailRule(rule: PaperlessMailRule = null) {
editMailRule(rule: MailRule = null) {
const modal = this.modalService.open(MailRuleEditDialogComponent, {
backdrop: 'static',
size: 'xl',
@@ -164,7 +164,7 @@ export class MailComponent
})
}
deleteMailRule(rule: PaperlessMailRule) {
deleteMailRule(rule: MailRule) {
const modal = this.modalService.open(ConfirmDialogComponent, {
backdrop: 'static',
})
@@ -193,7 +193,7 @@ export class MailComponent
})
}
editPermissions(object: PaperlessMailRule | PaperlessMailAccount) {
editPermissions(object: MailRule | MailAccount) {
const modal = this.modalService.open(PermissionsDialogComponent, {
backdrop: 'static',
})
@@ -202,9 +202,8 @@ export class MailComponent
dialog.object = object
modal.componentInstance.confirmClicked.subscribe((permissions) => {
modal.componentInstance.buttonsEnabled = false
const service: AbstractPaperlessService<
PaperlessMailRule | PaperlessMailAccount
> = 'account' in object ? this.mailRuleService : this.mailAccountService
const service: AbstractPaperlessService<MailRule | MailAccount> =
'account' in object ? this.mailRuleService : this.mailAccountService
object.owner = permissions['owner']
object['set_permissions'] = permissions['set_permissions']
service.patch(object).subscribe({

View File

@@ -15,7 +15,7 @@ import {
NgbPaginationModule,
} from '@ng-bootstrap/ng-bootstrap'
import { of, throwError } from 'rxjs'
import { PaperlessTag } from 'src/app/data/paperless-tag'
import { Tag } from 'src/app/data/tag'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { SortableDirective } from 'src/app/directives/sortable.directive'
import { SafeHtmlPipe } from 'src/app/pipes/safehtml.pipe'
@@ -37,7 +37,7 @@ import { MATCH_NONE } from 'src/app/data/matching-model'
import { MATCH_LITERAL } from 'src/app/data/matching-model'
import { PermissionsDialogComponent } from '../../common/permissions-dialog/permissions-dialog.component'
const tags: PaperlessTag[] = [
const tags: Tag[] = [
{
id: 1,
name: 'Tag1 Foo',
@@ -57,8 +57,8 @@ const tags: PaperlessTag[] = [
]
describe('ManagementListComponent', () => {
let component: ManagementListComponent<PaperlessTag>
let fixture: ComponentFixture<ManagementListComponent<PaperlessTag>>
let component: ManagementListComponent<Tag>
let fixture: ComponentFixture<ManagementListComponent<Tag>>
let tagService: TagService
let modalService: NgbModal
let toastService: ToastService
@@ -151,8 +151,7 @@ describe('ManagementListComponent', () => {
createButton.triggerEventHandler('click')
expect(modal).not.toBeUndefined()
const editDialog =
modal.componentInstance as EditDialogComponent<PaperlessTag>
const editDialog = modal.componentInstance as EditDialogComponent<Tag>
// fail first
editDialog.failed.emit({ error: 'error creating item' })
@@ -176,8 +175,7 @@ describe('ManagementListComponent', () => {
editButton.triggerEventHandler('click')
expect(modal).not.toBeUndefined()
const editDialog =
modal.componentInstance as EditDialogComponent<PaperlessTag>
const editDialog = modal.componentInstance as EditDialogComponent<Tag>
expect(editDialog.object).toEqual(tags[0])
// fail first

View File

@@ -1,7 +1,7 @@
import { Component } from '@angular/core'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { FILTER_HAS_STORAGE_PATH_ANY } from 'src/app/data/filter-rule-type'
import { PaperlessStoragePath } from 'src/app/data/paperless-storage-path'
import { StoragePath } from 'src/app/data/storage-path'
import { DocumentListViewService } from 'src/app/services/document-list-view.service'
import {
PermissionsService,
@@ -17,7 +17,7 @@ import { ManagementListComponent } from '../management-list/management-list.comp
templateUrl: './../management-list/management-list.component.html',
styleUrls: ['./../management-list/management-list.component.scss'],
})
export class StoragePathListComponent extends ManagementListComponent<PaperlessStoragePath> {
export class StoragePathListComponent extends ManagementListComponent<StoragePath> {
constructor(
directoryService: StoragePathService,
modalService: NgbModal,
@@ -40,7 +40,7 @@ export class StoragePathListComponent extends ManagementListComponent<PaperlessS
{
key: 'path',
name: $localize`Path`,
valueFn: (c: PaperlessStoragePath) => {
valueFn: (c: StoragePath) => {
return c.path
},
},
@@ -48,7 +48,7 @@ export class StoragePathListComponent extends ManagementListComponent<PaperlessS
)
}
getDeleteMessage(object: PaperlessStoragePath) {
getDeleteMessage(object: StoragePath) {
return $localize`Do you really want to delete the storage path "${object.name}"?`
}
}

View File

@@ -1,7 +1,7 @@
import { Component } from '@angular/core'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { FILTER_HAS_TAGS_ALL } from 'src/app/data/filter-rule-type'
import { PaperlessTag } from 'src/app/data/paperless-tag'
import { Tag } from 'src/app/data/tag'
import { DocumentListViewService } from 'src/app/services/document-list-view.service'
import {
PermissionsService,
@@ -17,7 +17,7 @@ import { ManagementListComponent } from '../management-list/management-list.comp
templateUrl: './../management-list/management-list.component.html',
styleUrls: ['./../management-list/management-list.component.scss'],
})
export class TagListComponent extends ManagementListComponent<PaperlessTag> {
export class TagListComponent extends ManagementListComponent<Tag> {
constructor(
tagService: TagService,
modalService: NgbModal,
@@ -41,7 +41,7 @@ export class TagListComponent extends ManagementListComponent<PaperlessTag> {
key: 'color',
name: $localize`Color`,
rendersHtml: true,
valueFn: (t: PaperlessTag) => {
valueFn: (t: Tag) => {
return `<span class="badge" style="color: ${t.text_color}; background-color: ${t.color}">${t.color}</span>`
},
},
@@ -49,7 +49,7 @@ export class TagListComponent extends ManagementListComponent<PaperlessTag> {
)
}
getDeleteMessage(object: PaperlessTag) {
getDeleteMessage(object: Tag) {
return $localize`Do you really want to delete the tag "${object.name}"?`
}
}