From 6f25917c86a5152ae1ec3988cd42f4dc7b76df66 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 8 Nov 2022 11:11:35 -0800 Subject: [PATCH] Mail account edit dialog --- src-ui/src/app/app.module.ts | 4 ++ .../mail-account-edit-dialog.component.html | 26 +++++++++++ .../mail-account-edit-dialog.component.scss | 0 .../mail-account-edit-dialog.component.ts | 45 ++++++++++++++++++ .../storage-path-edit-dialog.component.ts | 9 +--- .../input/password/password.component.html | 8 ++++ .../input/password/password.component.scss | 0 .../input/password/password.component.ts | 21 +++++++++ .../manage/settings/settings.component.html | 46 +++++++++++++------ .../manage/settings/settings.component.ts | 33 ++++++++++++- src-ui/src/app/data/paperless-mail-account.ts | 12 +++-- 11 files changed, 180 insertions(+), 24 deletions(-) create mode 100644 src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html create mode 100644 src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.scss create mode 100644 src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts create mode 100644 src-ui/src/app/components/common/input/password/password.component.html create mode 100644 src-ui/src/app/components/common/input/password/password.component.scss create mode 100644 src-ui/src/app/components/common/input/password/password.component.ts diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index 3d0a7e3c7..4a65209b9 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -39,6 +39,7 @@ import { NgxFileDropModule } from 'ngx-file-drop' import { TextComponent } from './components/common/input/text/text.component' import { SelectComponent } from './components/common/input/select/select.component' import { CheckComponent } from './components/common/input/check/check.component' +import { PasswordComponent } from './components/common/input/password/password.component' import { SaveViewConfigDialogComponent } from './components/document-list/save-view-config-dialog/save-view-config-dialog.component' import { TagsComponent } from './components/common/input/tags/tags.component' import { SortableDirective } from './directives/sortable.directive' @@ -76,6 +77,7 @@ import { StoragePathEditDialogComponent } from './components/common/edit-dialog/ import { SettingsService } from './services/settings.service' import { TasksComponent } from './components/manage/tasks/tasks.component' import { TourNgBootstrapModule } from 'ngx-ui-tour-ng-bootstrap' +import { MailAccountEditDialogComponent } from './components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component' import localeBe from '@angular/common/locales/be' import localeCs from '@angular/common/locales/cs' @@ -142,6 +144,7 @@ function initializeApp(settings: SettingsService) { TagEditDialogComponent, DocumentTypeEditDialogComponent, StoragePathEditDialogComponent, + MailAccountEditDialogComponent, TagComponent, ClearableBadge, PageHeaderComponent, @@ -157,6 +160,7 @@ function initializeApp(settings: SettingsService) { TextComponent, SelectComponent, CheckComponent, + PasswordComponent, SaveViewConfigDialogComponent, TagsComponent, SortableDirective, diff --git a/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html b/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html new file mode 100644 index 000000000..807df18c5 --- /dev/null +++ b/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.html @@ -0,0 +1,26 @@ +
+ + + +
diff --git a/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.scss b/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts new file mode 100644 index 000000000..f4d395b03 --- /dev/null +++ b/src-ui/src/app/components/common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component.ts @@ -0,0 +1,45 @@ +import { Component } from '@angular/core' +import { FormControl, FormGroup } from '@angular/forms' +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' +import { EditDialogComponent } from 'src/app/components/common/edit-dialog/edit-dialog.component' +import { + IMAPSecurity, + IMAPSecurityLabels, + PaperlessMailAccount, +} from 'src/app/data/paperless-mail-account' +import { MailAccountService } from 'src/app/services/rest/mail-account.service' + +@Component({ + selector: 'app-mail-account-edit-dialog', + templateUrl: './mail-account-edit-dialog.component.html', + styleUrls: ['./mail-account-edit-dialog.component.scss'], +}) +export class MailAccountEditDialogComponent extends EditDialogComponent { + constructor(service: MailAccountService, activeModal: NgbActiveModal) { + super(service, activeModal) + } + + getCreateTitle() { + return $localize`Create new mail account` + } + + getEditTitle() { + return $localize`Edit mail account` + } + + getForm(): FormGroup { + return new FormGroup({ + name: new FormControl(null), + imap_server: new FormControl(null), + imap_port: new FormControl(null), + imap_security: new FormControl(IMAPSecurity.SSL), + username: new FormControl(null), + password: new FormControl(null), + character_set: new FormControl('UTF-8'), + }) + } + + get imapSecurityOptions() { + return IMAPSecurityLabels + } +} diff --git a/src-ui/src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts index 011c15e73..1dfef00c5 100644 --- a/src-ui/src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts @@ -5,7 +5,6 @@ import { EditDialogComponent } from 'src/app/components/common/edit-dialog/edit- import { DEFAULT_MATCHING_ALGORITHM } from 'src/app/data/matching-model' import { PaperlessStoragePath } from 'src/app/data/paperless-storage-path' import { StoragePathService } from 'src/app/services/rest/storage-path.service' -import { ToastService } from 'src/app/services/toast.service' @Component({ selector: 'app-storage-path-edit-dialog', @@ -13,12 +12,8 @@ import { ToastService } from 'src/app/services/toast.service' styleUrls: ['./storage-path-edit-dialog.component.scss'], }) export class StoragePathEditDialogComponent extends EditDialogComponent { - constructor( - service: StoragePathService, - activeModal: NgbActiveModal, - toastService: ToastService - ) { - super(service, activeModal, toastService) + constructor(service: StoragePathService, activeModal: NgbActiveModal) { + super(service, activeModal) } get pathHint() { diff --git a/src-ui/src/app/components/common/input/password/password.component.html b/src-ui/src/app/components/common/input/password/password.component.html new file mode 100644 index 000000000..57cdd6de8 --- /dev/null +++ b/src-ui/src/app/components/common/input/password/password.component.html @@ -0,0 +1,8 @@ +
+ + + +
+ {{error}} +
+
diff --git a/src-ui/src/app/components/common/input/password/password.component.scss b/src-ui/src/app/components/common/input/password/password.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/src-ui/src/app/components/common/input/password/password.component.ts b/src-ui/src/app/components/common/input/password/password.component.ts new file mode 100644 index 000000000..3216dbed2 --- /dev/null +++ b/src-ui/src/app/components/common/input/password/password.component.ts @@ -0,0 +1,21 @@ +import { Component, forwardRef } from '@angular/core' +import { NG_VALUE_ACCESSOR } from '@angular/forms' +import { AbstractInputComponent } from '../abstract-input' + +@Component({ + providers: [ + { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => PasswordComponent), + multi: true, + }, + ], + selector: 'app-input-password', + templateUrl: './password.component.html', + styleUrls: ['./password.component.scss'], +}) +export class PasswordComponent extends AbstractInputComponent { + constructor() { + super() + } +} diff --git a/src-ui/src/app/components/manage/settings/settings.component.html b/src-ui/src/app/components/manage/settings/settings.component.html index 9ba010c0e..423002e83 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.html +++ b/src-ui/src/app/components/manage/settings/settings.component.html @@ -222,28 +222,48 @@

Mail accounts

-
+
    -
    -
    - {{account.name}} +
  • +
    +
    Name
    +
    Server
    +
     
    -
  • + + +
  • +
    +
    +
    {{account.imap_server}}
    +
    +
    +
  • No mail accounts defined.
    -
    +
-

Mail rules

-
+

Mail rules

+
    -
    -
    - {{rule.name}} +
  • +
    +
    Name
    +
    Account
    +
     
    -
  • + + +
  • +
    +
    +
    {{rule.account.name}}
    +
    +
    +
  • No mail rules defined.
    -
    +
diff --git a/src-ui/src/app/components/manage/settings/settings.component.ts b/src-ui/src/app/components/manage/settings/settings.component.ts index c6ffc13db..d87ae2137 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.ts +++ b/src-ui/src/app/components/manage/settings/settings.component.ts @@ -33,6 +33,8 @@ import { PaperlessMailAccount } from 'src/app/data/paperless-mail-account' import { PaperlessMailRule } from 'src/app/data/paperless-mail-rule' import { MailAccountService as MailAccountService } from 'src/app/services/rest/mail-account.service' import { MailRuleService } from 'src/app/services/rest/mail-rule.service' +import { NgbModal } from '@ng-bootstrap/ng-bootstrap' +import { MailAccountEditDialogComponent } from '../../common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component' @Component({ selector: 'app-settings', @@ -104,7 +106,8 @@ export class SettingsComponent @Inject(LOCALE_ID) public currentLocale: string, private viewportScroller: ViewportScroller, private activatedRoute: ActivatedRoute, - public readonly tourService: TourService + public readonly tourService: TourService, + private modalService: NgbModal ) { this.settings.settingsSaved.subscribe(() => { if (!this.savePending) this.initialize() @@ -470,4 +473,32 @@ export class SettingsComponent clearThemeColor() { this.settingsForm.get('themeColor').patchValue('') } + + editMailAccount(account: PaperlessMailAccount) { + console.log(account) + + var modal = this.modalService.open(MailAccountEditDialogComponent, { + backdrop: 'static', + size: 'xl', + }) + modal.componentInstance.dialogMode = 'edit' + modal.componentInstance.object = account + // modal.componentInstance.success + // .pipe( + // switchMap((newStoragePath) => { + // return this.storagePathService + // .listAll() + // .pipe(map((storagePaths) => ({ newStoragePath, storagePaths }))) + // }) + // ) + // .pipe(takeUntil(this.unsubscribeNotifier)) + // .subscribe(({ newStoragePath, storagePaths }) => { + // this.storagePaths = storagePaths.results + // this.documentForm.get('storage_path').setValue(newStoragePath.id) + // }) + } + + editMailRule(rule: PaperlessMailRule) { + console.log(rule) + } } diff --git a/src-ui/src/app/data/paperless-mail-account.ts b/src-ui/src/app/data/paperless-mail-account.ts index 243caa9bd..ea5c17a1b 100644 --- a/src-ui/src/app/data/paperless-mail-account.ts +++ b/src-ui/src/app/data/paperless-mail-account.ts @@ -1,11 +1,17 @@ import { ObjectWithId } from './object-with-id' export enum IMAPSecurity { - None = 0, - SSL = 1, - STARTTLS = 2, + None = 1, + SSL = 2, + STARTTLS = 3, } +export const IMAPSecurityLabels: Array<{ id: number; name: string }> = [ + { id: IMAPSecurity.None, name: $localize`No encryption` }, + { id: IMAPSecurity.SSL, name: $localize`SSL` }, + { id: IMAPSecurity.STARTTLS, name: $localize`STARTTLS` }, +] + export interface PaperlessMailAccount extends ObjectWithId { name: string