Chore: update to Angular 20 (#10273)

This commit is contained in:
shamoon
2025-06-27 14:06:40 -07:00
committed by GitHub
parent dfad3c4d8e
commit 958f98d7e5
146 changed files with 2662 additions and 2687 deletions

View File

@@ -1,9 +1,8 @@
import { NgClass, TitleCasePipe } from '@angular/common'
import { Component } from '@angular/core'
import { Component, inject } from '@angular/core'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import {
NgbDropdownModule,
NgbModal,
NgbPaginationModule,
} from '@ng-bootstrap/ng-bootstrap'
import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons'
@@ -12,13 +11,8 @@ import { FILTER_HAS_CORRESPONDENT_ANY } from 'src/app/data/filter-rule-type'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { SortableDirective } from 'src/app/directives/sortable.directive'
import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe'
import { DocumentListViewService } from 'src/app/services/document-list-view.service'
import {
PermissionsService,
PermissionType,
} from 'src/app/services/permissions.service'
import { PermissionType } from 'src/app/services/permissions.service'
import { CorrespondentService } from 'src/app/services/rest/correspondent.service'
import { ToastService } from 'src/app/services/toast.service'
import { CorrespondentEditDialogComponent } from '../../common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component'
import { PageHeaderComponent } from '../../common/page-header/page-header.component'
import { ManagementListComponent } from '../management-list/management-list.component'
@@ -42,47 +36,37 @@ import { ManagementListComponent } from '../management-list/management-list.comp
],
})
export class CorrespondentListComponent extends ManagementListComponent<Correspondent> {
constructor(
correspondentsService: CorrespondentService,
modalService: NgbModal,
toastService: ToastService,
documentListViewService: DocumentListViewService,
permissionsService: PermissionsService,
private datePipe: CustomDatePipe
) {
super(
correspondentsService,
modalService,
CorrespondentEditDialogComponent,
toastService,
documentListViewService,
permissionsService,
FILTER_HAS_CORRESPONDENT_ANY,
$localize`correspondent`,
$localize`correspondents`,
PermissionType.Correspondent,
[
{
key: 'last_correspondence',
name: $localize`Last used`,
valueFn: (c: Correspondent) => {
if (c.last_correspondence) {
let date = new Date(c.last_correspondence)
if (date.toString() == 'Invalid Date') {
// very old date strings are unable to be parsed
date = new Date(
c.last_correspondence
?.toString()
.replace(/([-+])(\d\d):\d\d:\d\d/gm, `$1$2:00`)
)
}
return this.datePipe.transform(date)
private datePipe = inject(CustomDatePipe)
constructor() {
super()
this.service = inject(CorrespondentService)
this.editDialogComponent = CorrespondentEditDialogComponent
this.filterRuleType = FILTER_HAS_CORRESPONDENT_ANY
this.typeName = $localize`correspondent`
this.typeNamePlural = $localize`correspondents`
this.permissionType = PermissionType.Correspondent
this.extraColumns = [
{
key: 'last_correspondence',
name: $localize`Last used`,
valueFn: (c: Correspondent) => {
if (c.last_correspondence) {
let date = new Date(c.last_correspondence)
if (date.toString() == 'Invalid Date') {
// very old date strings are unable to be parsed
date = new Date(
c.last_correspondence
?.toString()
.replace(/([-+])(\d\d):\d\d:\d\d/gm, `$1$2:00`)
)
}
return ''
},
return this.datePipe.transform(date)
}
return ''
},
]
)
},
]
}
public reloadData(): void {

View File

@@ -1,4 +1,4 @@
import { Component, OnInit } from '@angular/core'
import { Component, OnInit, inject } from '@angular/core'
import {
NgbDropdownModule,
NgbModal,
@@ -42,20 +42,16 @@ export class CustomFieldsComponent
extends LoadingComponentWithPermissions
implements OnInit
{
public fields: CustomField[] = []
private customFieldsService = inject(CustomFieldsService)
permissionsService = inject(PermissionsService)
private modalService = inject(NgbModal)
private toastService = inject(ToastService)
private documentListViewService = inject(DocumentListViewService)
private settingsService = inject(SettingsService)
private documentService = inject(DocumentService)
private savedViewService = inject(SavedViewService)
constructor(
private customFieldsService: CustomFieldsService,
public permissionsService: PermissionsService,
private modalService: NgbModal,
private toastService: ToastService,
private documentListViewService: DocumentListViewService,
private settingsService: SettingsService,
private documentService: DocumentService,
private savedViewService: SavedViewService
) {
super()
}
public fields: CustomField[] = []
ngOnInit() {
this.reload()

View File

@@ -1,9 +1,8 @@
import { NgClass, TitleCasePipe } from '@angular/common'
import { Component } from '@angular/core'
import { Component, inject } from '@angular/core'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import {
NgbDropdownModule,
NgbModal,
NgbPaginationModule,
} from '@ng-bootstrap/ng-bootstrap'
import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons'
@@ -11,13 +10,8 @@ import { DocumentType } from 'src/app/data/document-type'
import { FILTER_HAS_DOCUMENT_TYPE_ANY } from 'src/app/data/filter-rule-type'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
import { SortableDirective } from 'src/app/directives/sortable.directive'
import { DocumentListViewService } from 'src/app/services/document-list-view.service'
import {
PermissionsService,
PermissionType,
} from 'src/app/services/permissions.service'
import { PermissionType } from 'src/app/services/permissions.service'
import { DocumentTypeService } from 'src/app/services/rest/document-type.service'
import { ToastService } from 'src/app/services/toast.service'
import { DocumentTypeEditDialogComponent } from '../../common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component'
import { PageHeaderComponent } from '../../common/page-header/page-header.component'
import { ManagementListComponent } from '../management-list/management-list.component'
@@ -40,26 +34,14 @@ import { ManagementListComponent } from '../management-list/management-list.comp
],
})
export class DocumentTypeListComponent extends ManagementListComponent<DocumentType> {
constructor(
documentTypeService: DocumentTypeService,
modalService: NgbModal,
toastService: ToastService,
documentListViewService: DocumentListViewService,
permissionsService: PermissionsService
) {
super(
documentTypeService,
modalService,
DocumentTypeEditDialogComponent,
toastService,
documentListViewService,
permissionsService,
FILTER_HAS_DOCUMENT_TYPE_ANY,
$localize`document type`,
$localize`document types`,
PermissionType.DocumentType,
[]
)
constructor() {
super()
this.service = inject(DocumentTypeService)
this.editDialogComponent = DocumentTypeEditDialogComponent
this.filterRuleType = FILTER_HAS_DOCUMENT_TYPE_ANY
this.typeName = $localize`document type`
this.typeNamePlural = $localize`document types`
this.permissionType = PermissionType.DocumentType
}
getDeleteMessage(object: DocumentType) {

View File

@@ -1,5 +1,5 @@
import { AsyncPipe } from '@angular/common'
import { Component, OnDestroy, OnInit } from '@angular/core'
import { Component, OnDestroy, OnInit, inject } from '@angular/core'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { ActivatedRoute } from '@angular/router'
import { NgbDropdownModule, NgbModal } from '@ng-bootstrap/ng-bootstrap'
@@ -47,6 +47,14 @@ export class MailComponent
extends ComponentWithPermissions
implements OnInit, OnDestroy
{
mailAccountService = inject(MailAccountService)
mailRuleService = inject(MailRuleService)
private toastService = inject(ToastService)
private modalService = inject(NgbModal)
permissionsService = inject(PermissionsService)
private settingsService = inject(SettingsService)
private route = inject(ActivatedRoute)
public MailAccountType = MailAccountType
mailAccounts: MailAccount[] = []
@@ -68,18 +76,6 @@ export class MailComponent
public loadingAccounts: boolean = true
public showAccounts: boolean = false
constructor(
public mailAccountService: MailAccountService,
public mailRuleService: MailRuleService,
private toastService: ToastService,
private modalService: NgbModal,
public permissionsService: PermissionsService,
private settingsService: SettingsService,
private route: ActivatedRoute
) {
super()
}
ngOnInit(): void {
this.mailAccountService
.listAll(null, null, { full_perms: true })

View File

@@ -1,6 +1,7 @@
import { HttpErrorResponse } from '@angular/common/http'
import {
Directive,
inject,
OnDestroy,
OnInit,
QueryList,
@@ -59,21 +60,19 @@ export abstract class ManagementListComponent<T extends MatchingModel>
extends LoadingComponentWithPermissions
implements OnInit, OnDestroy
{
constructor(
protected service: AbstractNameFilterService<T>,
private modalService: NgbModal,
private editDialogComponent: any,
private toastService: ToastService,
private documentListViewService: DocumentListViewService,
private permissionsService: PermissionsService,
protected filterRuleType: number,
public typeName: string,
public typeNamePlural: string,
public permissionType: PermissionType,
public extraColumns: ManagementListColumn[]
) {
super()
}
protected service: AbstractNameFilterService<T>
private modalService: NgbModal = inject(NgbModal)
protected editDialogComponent: any
private toastService: ToastService = inject(ToastService)
private documentListViewService: DocumentListViewService = inject(
DocumentListViewService
)
private permissionsService: PermissionsService = inject(PermissionsService)
protected filterRuleType: number
public typeName: string
public typeNamePlural: string
public permissionType: PermissionType
public extraColumns: ManagementListColumn[]
@ViewChildren(SortableDirective) headers: QueryList<SortableDirective>

View File

@@ -1,5 +1,5 @@
import { AsyncPipe } from '@angular/common'
import { Component, OnDestroy, OnInit } from '@angular/core'
import { Component, OnDestroy, OnInit, inject } from '@angular/core'
import {
FormControl,
FormGroup,
@@ -40,6 +40,10 @@ export class SavedViewsComponent
extends LoadingComponentWithPermissions
implements OnInit, OnDestroy
{
private savedViewService = inject(SavedViewService)
private settings = inject(SettingsService)
private toastService = inject(ToastService)
DisplayMode = DisplayMode
public savedViews: SavedView[]
@@ -55,11 +59,7 @@ export class SavedViewsComponent
return this.settings.allDisplayFields
}
constructor(
private savedViewService: SavedViewService,
private settings: SettingsService,
private toastService: ToastService
) {
constructor() {
super()
this.settings.organizingSidebarSavedViews = true
}

View File

@@ -1,9 +1,8 @@
import { NgClass, TitleCasePipe } from '@angular/common'
import { Component } from '@angular/core'
import { Component, inject } from '@angular/core'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import {
NgbDropdownModule,
NgbModal,
NgbPaginationModule,
} from '@ng-bootstrap/ng-bootstrap'
import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons'
@@ -12,13 +11,8 @@ import { StoragePath } from 'src/app/data/storage-path'
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'
import { DocumentListViewService } from 'src/app/services/document-list-view.service'
import {
PermissionsService,
PermissionType,
} from 'src/app/services/permissions.service'
import { PermissionType } from 'src/app/services/permissions.service'
import { StoragePathService } from 'src/app/services/rest/storage-path.service'
import { ToastService } from 'src/app/services/toast.service'
import { StoragePathEditDialogComponent } from '../../common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component'
import { PageHeaderComponent } from '../../common/page-header/page-header.component'
import { ManagementListComponent } from '../management-list/management-list.component'
@@ -42,36 +36,25 @@ import { ManagementListComponent } from '../management-list/management-list.comp
],
})
export class StoragePathListComponent extends ManagementListComponent<StoragePath> {
constructor(
directoryService: StoragePathService,
modalService: NgbModal,
toastService: ToastService,
documentListViewService: DocumentListViewService,
permissionsService: PermissionsService
) {
super(
directoryService,
modalService,
StoragePathEditDialogComponent,
toastService,
documentListViewService,
permissionsService,
FILTER_HAS_STORAGE_PATH_ANY,
$localize`storage path`,
$localize`storage paths`,
PermissionType.StoragePath,
[
{
key: 'path',
name: $localize`Path`,
rendersHtml: true,
hideOnMobile: true,
valueFn: (c: StoragePath) => {
return `<code>${c.path?.slice(0, 49)}${c.path?.length > 50 ? '...' : ''}</code>`
},
constructor() {
super()
this.service = inject(StoragePathService)
this.editDialogComponent = StoragePathEditDialogComponent
this.filterRuleType = FILTER_HAS_STORAGE_PATH_ANY
this.typeName = $localize`storage path`
this.typeNamePlural = $localize`storage paths`
this.permissionType = PermissionType.StoragePath
this.extraColumns = [
{
key: 'path',
name: $localize`Path`,
rendersHtml: true,
hideOnMobile: true,
valueFn: (c: StoragePath) => {
return `<code>${c.path?.slice(0, 49)}${c.path?.length > 50 ? '...' : ''}</code>`
},
]
)
},
]
}
getDeleteMessage(object: StoragePath) {

View File

@@ -1,9 +1,8 @@
import { NgClass, TitleCasePipe } from '@angular/common'
import { Component } from '@angular/core'
import { Component, inject } from '@angular/core'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import {
NgbDropdownModule,
NgbModal,
NgbPaginationModule,
} from '@ng-bootstrap/ng-bootstrap'
import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons'
@@ -12,13 +11,8 @@ 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'
import { DocumentListViewService } from 'src/app/services/document-list-view.service'
import {
PermissionsService,
PermissionType,
} from 'src/app/services/permissions.service'
import { PermissionType } from 'src/app/services/permissions.service'
import { TagService } from 'src/app/services/rest/tag.service'
import { ToastService } from 'src/app/services/toast.service'
import { TagEditDialogComponent } from '../../common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component'
import { PageHeaderComponent } from '../../common/page-header/page-header.component'
import { ManagementListComponent } from '../management-list/management-list.component'
@@ -42,35 +36,24 @@ import { ManagementListComponent } from '../management-list/management-list.comp
],
})
export class TagListComponent extends ManagementListComponent<Tag> {
constructor(
tagService: TagService,
modalService: NgbModal,
toastService: ToastService,
documentListViewService: DocumentListViewService,
permissionsService: PermissionsService
) {
super(
tagService,
modalService,
TagEditDialogComponent,
toastService,
documentListViewService,
permissionsService,
FILTER_HAS_TAGS_ALL,
$localize`tag`,
$localize`tags`,
PermissionType.Tag,
[
{
key: 'color',
name: $localize`Color`,
rendersHtml: true,
valueFn: (t: Tag) => {
return `<span class="badge" style="color: ${t.text_color}; background-color: ${t.color}">${t.color}</span>`
},
constructor() {
super()
this.service = inject(TagService)
this.editDialogComponent = TagEditDialogComponent
this.filterRuleType = FILTER_HAS_TAGS_ALL
this.typeName = $localize`tag`
this.typeNamePlural = $localize`tags`
this.permissionType = PermissionType.Tag
this.extraColumns = [
{
key: 'color',
name: $localize`Color`,
rendersHtml: true,
valueFn: (t: Tag) => {
return `<span class="badge" style="color: ${t.text_color}; background-color: ${t.color}">${t.color}</span>`
},
]
)
},
]
}
getDeleteMessage(object: Tag) {

View File

@@ -1,4 +1,4 @@
import { Component, OnInit } from '@angular/core'
import { Component, OnInit, inject } from '@angular/core'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { NgbDropdownModule, NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons'
@@ -34,16 +34,12 @@ export class WorkflowsComponent
extends LoadingComponentWithPermissions
implements OnInit
{
public workflows: Workflow[] = []
private workflowService = inject(WorkflowService)
permissionsService = inject(PermissionsService)
private modalService = inject(NgbModal)
private toastService = inject(ToastService)
constructor(
private workflowService: WorkflowService,
public permissionsService: PermissionsService,
private modalService: NgbModal,
private toastService: ToastService
) {
super()
}
public workflows: Workflow[] = []
ngOnInit() {
this.reload()