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'
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'
TagEditDialogComponent,
DocumentTypeEditDialogComponent,
StoragePathEditDialogComponent,
+ MailAccountEditDialogComponent,
TagComponent,
ClearableBadge,
PageHeaderComponent,
TextComponent,
SelectComponent,
CheckComponent,
+ PasswordComponent,
SaveViewConfigDialogComponent,
TagsComponent,
SortableDirective,
--- /dev/null
+<form [formGroup]="objectForm" (ngSubmit)="save()">
+ <div class="modal-header">
+ <h4 class="modal-title" id="modal-basic-title">{{getTitle()}}</h4>
+ <button type="button" [disabled]="!closeEnabled" class="btn-close" aria-label="Close" (click)="cancel()">
+ </button>
+ </div>
+ <div class="modal-body">
+ <div class="row">
+ <div class="col">
+ <app-input-text i18n-title title="Name" formControlName="name" [error]="error?.name"></app-input-text>
+ <app-input-text i18n-title title="IMAP Server" formControlName="imap_server" [error]="error?.imap_server"></app-input-text>
+ <app-input-text i18n-title title="IMAP Port" formControlName="imap_server" [error]="error?.imap_port"></app-input-text>
+ <app-input-select i18n-title title="IMAP Security" [items]="imapSecurityOptions" formControlName="imap_security"></app-input-select>
+ </div>
+ <div class="col">
+ <app-input-text i18n-title title="Username" formControlName="username" [error]="error?.username"></app-input-text>
+ <app-input-password i18n-title title="Password" formControlName="password" [error]="error?.password"></app-input-password>
+ <app-input-text i18n-title title="Character Set" formControlName="character_set" [error]="error?.character_set"></app-input-text>
+ </div>
+ </div>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-outline-secondary" (click)="cancel()" i18n [disabled]="networkActive">Cancel</button>
+ <button type="submit" class="btn btn-primary" i18n [disabled]="networkActive">Save</button>
+ </div>
+</form>
--- /dev/null
+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<PaperlessMailAccount> {
+ 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
+ }
+}
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',
styleUrls: ['./storage-path-edit-dialog.component.scss'],
})
export class StoragePathEditDialogComponent extends EditDialogComponent<PaperlessStoragePath> {
- constructor(
- service: StoragePathService,
- activeModal: NgbActiveModal,
- toastService: ToastService
- ) {
- super(service, activeModal, toastService)
+ constructor(service: StoragePathService, activeModal: NgbActiveModal) {
+ super(service, activeModal)
}
get pathHint() {
--- /dev/null
+<div class="mb-3">
+ <label class="form-label" [for]="inputId">{{title}}</label>
+ <input #inputField type="password" class="form-control" [class.is-invalid]="error" [id]="inputId" [(ngModel)]="value" (change)="onChange(value)">
+ <small *ngIf="hint" class="form-text text-muted" [innerHTML]="hint | safeHtml"></small>
+ <div class="invalid-feedback">
+ {{error}}
+ </div>
+</div>
--- /dev/null
+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<string> {
+ constructor() {
+ super()
+ }
+}
<ng-template ngbNavContent>
<h4 i18n>Mail accounts</h4>
- <div formGroupName="mailAccounts">
+ <ul formGroupName="mailAccounts">
- <div *ngFor="let account of mailAccounts" [formGroupName]="account.id" class="row">
- <div class="mb-3 col">
- {{account.name}}
+ <li class="row mb-1">
+ <div class="row">
+ <div class="col" i18n>Name</div>
+ <div class="col" i18n>Server</div>
+ <div class="col"> </div>
</div>
- </div>
+ </li>
+
+ <li *ngFor="let account of mailAccounts" [formGroupName]="account.id" class="row mb-1">
+ <div class="row">
+ <div class="col"><button class="btn btn-link p-0" type="button" (click)="editMailAccount(account)">{{account.name}}</button></div>
+ <div class="col">{{account.imap_server}}</div>
+ <div class="col"><button class="btn btn-primary" type="button" (click)="editMailAccount(account)" i18n>Edit</button></div>
+ </div>
+ </li>
<div *ngIf="mailAccounts.length == 0" i18n>No mail accounts defined.</div>
- </div>
+ </ul>
- <h4 i18n>Mail rules</h4>
- <div formGroupName="mailRules">
+ <h4 class="mt-4" i18n>Mail rules</h4>
+ <ul formGroupName="mailRules">
- <div *ngFor="let rule of mailRules" [formGroupName]="rule.id" class="row">
- <div class="mb-3 col">
- {{rule.name}}
+ <li class="row mb-1">
+ <div class="row">
+ <div class="col" i18n>Name</div>
+ <div class="col" i18n>Account</div>
+ <div class="col"> </div>
</div>
- </div>
+ </li>
+
+ <li *ngFor="let rule of mailRules" [formGroupName]="rule.id" class="row">
+ <div class="row">
+ <div class="col"><button class="btn btn-link p-0" type="button" (click)="editMailRule(rule)">{{rule.name}}</button></div>
+ <div class="col">{{rule.account.name}}</div>
+ <div class="col"><button class="btn btn-primary" type="button" (click)="editMailRule(rule)" i18n>Edit</button></div>
+ </div>
+ </li>
<div *ngIf="mailRules.length == 0" i18n>No mail rules defined.</div>
- </div>
+ </ul>
</ng-template>
</li>
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',
@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()
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)
+ }
}
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