mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-11-03 03:16:10 -06:00 
			
		
		
		
	more settings
This commit is contained in:
		@@ -195,6 +195,9 @@ export class FilterableDropdownComponent {
 | 
			
		||||
  @Input()
 | 
			
		||||
  editing = false
 | 
			
		||||
 | 
			
		||||
  @Input()
 | 
			
		||||
  applyOnClose = false
 | 
			
		||||
 | 
			
		||||
  @Output()
 | 
			
		||||
  apply = new EventEmitter<ChangedItems>()
 | 
			
		||||
 | 
			
		||||
@@ -208,7 +211,9 @@ export class FilterableDropdownComponent {
 | 
			
		||||
  applyClicked() {
 | 
			
		||||
    if (this.selectionModel.isDirty()) {
 | 
			
		||||
      this.dropdown.close()
 | 
			
		||||
      this.apply.emit(this.selectionModel.diff())
 | 
			
		||||
      if (!this.applyOnClose) {
 | 
			
		||||
        this.apply.emit(this.selectionModel.diff())
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -223,6 +228,9 @@ export class FilterableDropdownComponent {
 | 
			
		||||
      this.open.next()
 | 
			
		||||
    } else {
 | 
			
		||||
      this.filterText = ''
 | 
			
		||||
      if (this.applyOnClose && this.selectionModel.isDirty()) {
 | 
			
		||||
        this.apply.emit(this.selectionModel.diff())
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -30,6 +30,7 @@
 | 
			
		||||
        [items]="tags"
 | 
			
		||||
        [editing]="true"
 | 
			
		||||
        [multiple]="true"
 | 
			
		||||
        [applyOnClose]="applyOnClose"
 | 
			
		||||
        (open)="openTagsDropdown()"
 | 
			
		||||
        [(selectionModel)]="tagSelectionModel"
 | 
			
		||||
        (apply)="setTags($event)">
 | 
			
		||||
@@ -37,6 +38,7 @@
 | 
			
		||||
      <app-filterable-dropdown class="mr-2 mr-md-3" title="Correspondent" icon="person-fill"
 | 
			
		||||
        [items]="correspondents"
 | 
			
		||||
        [editing]="true"
 | 
			
		||||
        [applyOnClose]="applyOnClose"
 | 
			
		||||
        (open)="openCorrespondentDropdown()"
 | 
			
		||||
        [(selectionModel)]="correspondentSelectionModel"
 | 
			
		||||
        (apply)="setCorrespondents($event)">
 | 
			
		||||
@@ -44,6 +46,7 @@
 | 
			
		||||
      <app-filterable-dropdown class="mr-2 mr-md-3" title="Document Type" icon="file-earmark-fill"
 | 
			
		||||
        [items]="documentTypes"
 | 
			
		||||
        [editing]="true"
 | 
			
		||||
        [applyOnClose]="applyOnClose"
 | 
			
		||||
        (open)="openDocumentTypeDropdown()"
 | 
			
		||||
        [(selectionModel)]="documentTypeSelectionModel"
 | 
			
		||||
        (apply)="setDocumentTypes($event)">
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,7 @@ import { ConfirmDialogComponent } from 'src/app/components/common/confirm-dialog
 | 
			
		||||
import { ChangedItems, FilterableDropdownSelectionModel } from '../../common/filterable-dropdown/filterable-dropdown.component';
 | 
			
		||||
import { ToggleableItemState } from '../../common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component';
 | 
			
		||||
import { MatchingModel } from 'src/app/data/matching-model';
 | 
			
		||||
import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service';
 | 
			
		||||
 | 
			
		||||
@Component({
 | 
			
		||||
  selector: 'app-bulk-editor',
 | 
			
		||||
@@ -38,9 +39,13 @@ export class BulkEditorComponent {
 | 
			
		||||
    public list: DocumentListViewService,
 | 
			
		||||
    private documentService: DocumentService,
 | 
			
		||||
    private modalService: NgbModal,
 | 
			
		||||
    private openDocumentService: OpenDocumentsService
 | 
			
		||||
    private openDocumentService: OpenDocumentsService,
 | 
			
		||||
    private settings: SettingsService
 | 
			
		||||
  ) { }
 | 
			
		||||
 | 
			
		||||
  applyOnClose: boolean = this.settings.get(SETTINGS_KEYS.BULK_EDIT_APPLY_ON_CLOSE)
 | 
			
		||||
  showConfirmationDialogs: boolean = this.settings.get(SETTINGS_KEYS.BULK_EDIT_CONFIRMATION_DIALOGS)
 | 
			
		||||
 | 
			
		||||
  ngOnInit() {
 | 
			
		||||
    this.tagService.listAll().subscribe(result => this.tags = result.results)
 | 
			
		||||
    this.correspondentService.listAll().subscribe(result => this.correspondents = result.results)
 | 
			
		||||
@@ -54,7 +59,6 @@ export class BulkEditorComponent {
 | 
			
		||||
        this.list.selected.forEach(id => {
 | 
			
		||||
          this.openDocumentService.refreshDocument(id)
 | 
			
		||||
        })
 | 
			
		||||
        this.list.selectNone()
 | 
			
		||||
      })
 | 
			
		||||
    )
 | 
			
		||||
  }
 | 
			
		||||
@@ -105,30 +109,40 @@ export class BulkEditorComponent {
 | 
			
		||||
  setTags(changedTags: ChangedItems) {
 | 
			
		||||
    if (changedTags.itemsToAdd.length == 0 && changedTags.itemsToRemove.length == 0) return
 | 
			
		||||
 | 
			
		||||
    let modal = this.modalService.open(ConfirmDialogComponent, {backdrop: 'static'})
 | 
			
		||||
    modal.componentInstance.title = $localize`Confirm tags assignment`
 | 
			
		||||
    if (changedTags.itemsToAdd.length == 1 && changedTags.itemsToRemove.length == 0) {
 | 
			
		||||
      let tag = changedTags.itemsToAdd[0]
 | 
			
		||||
      modal.componentInstance.message = $localize`This operation will add the tag ${tag.name} to all ${this.list.selected.size} selected document(s).`
 | 
			
		||||
    } else if (changedTags.itemsToAdd.length > 1 && changedTags.itemsToRemove.length == 0) {
 | 
			
		||||
      modal.componentInstance.message = $localize`This operation will add the tags ${this._localizeList(changedTags.itemsToAdd)} to all ${this.list.selected.size} selected document(s).`
 | 
			
		||||
    } else if (changedTags.itemsToAdd.length == 0 && changedTags.itemsToRemove.length == 1) {
 | 
			
		||||
      let tag = changedTags.itemsToAdd[0]
 | 
			
		||||
      modal.componentInstance.message = $localize`This operation will remove the tag ${tag.name} from all ${this.list.selected.size} selected document(s).`
 | 
			
		||||
    } else if (changedTags.itemsToAdd.length == 0 && changedTags.itemsToRemove.length > 1) {
 | 
			
		||||
      modal.componentInstance.message = $localize`This operation will remove the tags ${this._localizeList(changedTags.itemsToRemove)} from all ${this.list.selected.size} selected document(s).`
 | 
			
		||||
    if (this.showConfirmationDialogs) {
 | 
			
		||||
      let modal = this.modalService.open(ConfirmDialogComponent, {backdrop: 'static'})
 | 
			
		||||
      modal.componentInstance.title = $localize`Confirm tags assignment`
 | 
			
		||||
      if (changedTags.itemsToAdd.length == 1 && changedTags.itemsToRemove.length == 0) {
 | 
			
		||||
        let tag = changedTags.itemsToAdd[0]
 | 
			
		||||
        modal.componentInstance.message = $localize`This operation will add the tag ${tag.name} to all ${this.list.selected.size} selected document(s).`
 | 
			
		||||
      } else if (changedTags.itemsToAdd.length > 1 && changedTags.itemsToRemove.length == 0) {
 | 
			
		||||
        modal.componentInstance.message = $localize`This operation will add the tags ${this._localizeList(changedTags.itemsToAdd)} to all ${this.list.selected.size} selected document(s).`
 | 
			
		||||
      } else if (changedTags.itemsToAdd.length == 0 && changedTags.itemsToRemove.length == 1) {
 | 
			
		||||
        let tag = changedTags.itemsToAdd[0]
 | 
			
		||||
        modal.componentInstance.message = $localize`This operation will remove the tag ${tag.name} from all ${this.list.selected.size} selected document(s).`
 | 
			
		||||
      } else if (changedTags.itemsToAdd.length == 0 && changedTags.itemsToRemove.length > 1) {
 | 
			
		||||
        modal.componentInstance.message = $localize`This operation will remove the tags ${this._localizeList(changedTags.itemsToRemove)} from all ${this.list.selected.size} selected document(s).`
 | 
			
		||||
      } else {
 | 
			
		||||
        modal.componentInstance.message = $localize`This operation will add the tags ${this._localizeList(changedTags.itemsToAdd)} and remove the tags ${this._localizeList(changedTags.itemsToRemove)} on all ${this.list.selected.size} selected document(s).`
 | 
			
		||||
      }
 | 
			
		||||
      
 | 
			
		||||
      modal.componentInstance.btnClass = "btn-warning"
 | 
			
		||||
      modal.componentInstance.btnCaption = $localize`Confirm`
 | 
			
		||||
      modal.componentInstance.confirmClicked.subscribe(() => {
 | 
			
		||||
        this.performSetTags(modal, changedTags)
 | 
			
		||||
      })
 | 
			
		||||
    } else {
 | 
			
		||||
      modal.componentInstance.message = $localize`This operation will add the tags ${this._localizeList(changedTags.itemsToAdd)} and remove the tags ${this._localizeList(changedTags.itemsToRemove)} on all ${this.list.selected.size} selected document(s).`
 | 
			
		||||
      this.performSetTags(null, changedTags)
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    modal.componentInstance.btnClass = "btn-warning"
 | 
			
		||||
    modal.componentInstance.btnCaption = $localize`Confirm`
 | 
			
		||||
    modal.componentInstance.confirmClicked.subscribe(() => {
 | 
			
		||||
      this.executeBulkOperation('modify_tags', {"add_tags": changedTags.itemsToAdd.map(t => t.id), "remove_tags": changedTags.itemsToRemove.map(t => t.id)}).subscribe(
 | 
			
		||||
        response => {
 | 
			
		||||
          this.tagService.clearCache()
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private performSetTags(modal, changedTags: ChangedItems) {
 | 
			
		||||
    this.executeBulkOperation('modify_tags', {"add_tags": changedTags.itemsToAdd.map(t => t.id), "remove_tags": changedTags.itemsToRemove.map(t => t.id)}).subscribe(
 | 
			
		||||
      response => {
 | 
			
		||||
        this.tagService.clearCache()
 | 
			
		||||
        if (modal) {
 | 
			
		||||
          modal.close()
 | 
			
		||||
        })
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    )
 | 
			
		||||
  }
 | 
			
		||||
@@ -136,47 +150,69 @@ export class BulkEditorComponent {
 | 
			
		||||
  setCorrespondents(changedCorrespondents: ChangedItems) {
 | 
			
		||||
    if (changedCorrespondents.itemsToAdd.length == 0 && changedCorrespondents.itemsToRemove.length == 0) return
 | 
			
		||||
 | 
			
		||||
    let modal = this.modalService.open(ConfirmDialogComponent, {backdrop: 'static'})
 | 
			
		||||
    modal.componentInstance.title = $localize`Confirm correspondent assignment`
 | 
			
		||||
    let correspondent = changedCorrespondents.itemsToAdd.length > 0 ? changedCorrespondents.itemsToAdd[0] : null
 | 
			
		||||
    if (correspondent) {
 | 
			
		||||
      modal.componentInstance.message = $localize`This operation will assign the correspondent ${correspondent.name} to all ${this.list.selected.size} selected document(s).`
 | 
			
		||||
 | 
			
		||||
    if (this.showConfirmationDialogs) {
 | 
			
		||||
      let modal = this.modalService.open(ConfirmDialogComponent, {backdrop: 'static'})
 | 
			
		||||
      modal.componentInstance.title = $localize`Confirm correspondent assignment`
 | 
			
		||||
      if (correspondent) {
 | 
			
		||||
        modal.componentInstance.message = $localize`This operation will assign the correspondent ${correspondent.name} to all ${this.list.selected.size} selected document(s).`
 | 
			
		||||
      } else {
 | 
			
		||||
        modal.componentInstance.message = $localize`This operation will remove the correspondent from all ${this.list.selected.size} selected document(s).`
 | 
			
		||||
      }
 | 
			
		||||
      modal.componentInstance.btnClass = "btn-warning"
 | 
			
		||||
      modal.componentInstance.btnCaption = $localize`Confirm`
 | 
			
		||||
      modal.componentInstance.confirmClicked.subscribe(() => {
 | 
			
		||||
        this.performSetCorrespondents(modal, correspondent)
 | 
			
		||||
      })
 | 
			
		||||
    } else {
 | 
			
		||||
      modal.componentInstance.message = $localize`This operation will remove the correspondent from all ${this.list.selected.size} selected document(s).`
 | 
			
		||||
      this.performSetCorrespondents(null, correspondent)
 | 
			
		||||
    }
 | 
			
		||||
    modal.componentInstance.btnClass = "btn-warning"
 | 
			
		||||
    modal.componentInstance.btnCaption = $localize`Confirm`
 | 
			
		||||
    modal.componentInstance.confirmClicked.subscribe(() => {
 | 
			
		||||
      this.executeBulkOperation('set_correspondent', {"correspondent": correspondent ? correspondent.id : null}).subscribe(
 | 
			
		||||
        response => {
 | 
			
		||||
          this.correspondentService.clearCache()
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private performSetCorrespondents(modal, correspondent: MatchingModel) {
 | 
			
		||||
    this.executeBulkOperation('set_correspondent', {"correspondent": correspondent ? correspondent.id : null}).subscribe(
 | 
			
		||||
      response => {
 | 
			
		||||
        this.correspondentService.clearCache()
 | 
			
		||||
        if (modal) {
 | 
			
		||||
          modal.close()
 | 
			
		||||
        }
 | 
			
		||||
      )
 | 
			
		||||
    })
 | 
			
		||||
      }
 | 
			
		||||
    )
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  setDocumentTypes(changedDocumentTypes: ChangedItems) {
 | 
			
		||||
    if (changedDocumentTypes.itemsToAdd.length == 0 && changedDocumentTypes.itemsToRemove.length == 0) return
 | 
			
		||||
 | 
			
		||||
    let modal = this.modalService.open(ConfirmDialogComponent, {backdrop: 'static'})
 | 
			
		||||
    modal.componentInstance.title = $localize`Confirm document type assignment`
 | 
			
		||||
    let documentType = changedDocumentTypes.itemsToAdd.length > 0 ? changedDocumentTypes.itemsToAdd[0] : null
 | 
			
		||||
    if (documentType) {
 | 
			
		||||
      modal.componentInstance.message = $localize`This operation will assign the document type ${documentType.name} to all ${this.list.selected.size} selected document(s).`
 | 
			
		||||
 | 
			
		||||
    if (this.showConfirmationDialogs) {
 | 
			
		||||
      let modal = this.modalService.open(ConfirmDialogComponent, {backdrop: 'static'})
 | 
			
		||||
      modal.componentInstance.title = $localize`Confirm document type assignment`
 | 
			
		||||
      if (documentType) {
 | 
			
		||||
        modal.componentInstance.message = $localize`This operation will assign the document type ${documentType.name} to all ${this.list.selected.size} selected document(s).`
 | 
			
		||||
      } else {
 | 
			
		||||
        modal.componentInstance.message = $localize`This operation will remove the document type from all ${this.list.selected.size} selected document(s).`
 | 
			
		||||
      }
 | 
			
		||||
      modal.componentInstance.btnClass = "btn-warning"
 | 
			
		||||
      modal.componentInstance.btnCaption = $localize`Confirm`
 | 
			
		||||
      modal.componentInstance.confirmClicked.subscribe(() => {
 | 
			
		||||
        this.performSetDocumentTypes(modal, documentType)
 | 
			
		||||
      })
 | 
			
		||||
    } else {
 | 
			
		||||
      modal.componentInstance.message = $localize`This operation will remove the document type from all ${this.list.selected.size} selected document(s).`
 | 
			
		||||
      this.performSetDocumentTypes(null, documentType)
 | 
			
		||||
    }
 | 
			
		||||
    modal.componentInstance.btnClass = "btn-warning"
 | 
			
		||||
    modal.componentInstance.btnCaption = $localize`Confirm`
 | 
			
		||||
    modal.componentInstance.confirmClicked.subscribe(() => {
 | 
			
		||||
      this.executeBulkOperation('set_document_type', {"document_type": documentType ? documentType.id : null}).subscribe(
 | 
			
		||||
        response => {
 | 
			
		||||
          this.documentService.clearCache()
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private performSetDocumentTypes(modal, documentType) {
 | 
			
		||||
    this.executeBulkOperation('set_document_type', {"document_type": documentType ? documentType.id : null}).subscribe(
 | 
			
		||||
      response => {
 | 
			
		||||
        this.documentTypeService.clearCache()
 | 
			
		||||
        if (modal) {
 | 
			
		||||
          modal.close()
 | 
			
		||||
        }
 | 
			
		||||
      )
 | 
			
		||||
    })
 | 
			
		||||
      }
 | 
			
		||||
    )
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  applyDelete() {
 | 
			
		||||
 
 | 
			
		||||
@@ -26,8 +26,15 @@
 | 
			
		||||
            </select>
 | 
			
		||||
        
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <h4 i18n>Bulk editing</h4>
 | 
			
		||||
 | 
			
		||||
        <app-input-check i18n-title title="Show confirmation dialogs" formControlName="bulkEditConfirmationDialogs" i18n-hint hint="Deleting documents will always ask for confirmation."></app-input-check>
 | 
			
		||||
        <app-input-check i18n-title title="Apply on close" formControlName="bulkEditApplyOnClose"></app-input-check>
 | 
			
		||||
 | 
			
		||||
      </ng-template>
 | 
			
		||||
    </li>
 | 
			
		||||
    <li [ngbNavItem]="2">
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
import { Component, OnInit } from '@angular/core';
 | 
			
		||||
import { FormControl, FormGroup } from '@angular/forms';
 | 
			
		||||
import { PaperlessSavedView } from 'src/app/data/paperless-saved-view';
 | 
			
		||||
import { GENERAL_SETTINGS } from 'src/app/data/storage-keys';
 | 
			
		||||
import { DocumentListViewService } from 'src/app/services/document-list-view.service';
 | 
			
		||||
import { SavedViewService } from 'src/app/services/rest/saved-view.service';
 | 
			
		||||
import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service';
 | 
			
		||||
import { ToastService } from 'src/app/services/toast.service';
 | 
			
		||||
 | 
			
		||||
@Component({
 | 
			
		||||
@@ -16,14 +16,17 @@ export class SettingsComponent implements OnInit {
 | 
			
		||||
  savedViewGroup = new FormGroup({})
 | 
			
		||||
 | 
			
		||||
  settingsForm = new FormGroup({
 | 
			
		||||
    'documentListItemPerPage': new FormControl(+localStorage.getItem(GENERAL_SETTINGS.DOCUMENT_LIST_SIZE) || GENERAL_SETTINGS.DOCUMENT_LIST_SIZE_DEFAULT),
 | 
			
		||||
    'bulkEditConfirmationDialogs': new FormControl(this.settings.get(SETTINGS_KEYS.BULK_EDIT_CONFIRMATION_DIALOGS)),
 | 
			
		||||
    'bulkEditApplyOnClose': new FormControl(this.settings.get(SETTINGS_KEYS.BULK_EDIT_APPLY_ON_CLOSE)),
 | 
			
		||||
    'documentListItemPerPage': new FormControl(this.settings.get(SETTINGS_KEYS.DOCUMENT_LIST_SIZE)),
 | 
			
		||||
    'savedViews': this.savedViewGroup
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  constructor(
 | 
			
		||||
    public savedViewService: SavedViewService,
 | 
			
		||||
    private documentListViewService: DocumentListViewService,
 | 
			
		||||
    private toastService: ToastService
 | 
			
		||||
    private toastService: ToastService,
 | 
			
		||||
    private settings: SettingsService
 | 
			
		||||
  ) { }
 | 
			
		||||
 | 
			
		||||
  savedViews: PaperlessSavedView[]
 | 
			
		||||
@@ -51,7 +54,9 @@ export class SettingsComponent implements OnInit {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private saveLocalSettings() {
 | 
			
		||||
    localStorage.setItem(GENERAL_SETTINGS.DOCUMENT_LIST_SIZE, this.settingsForm.value.documentListItemPerPage)
 | 
			
		||||
    this.settings.set(SETTINGS_KEYS.BULK_EDIT_APPLY_ON_CLOSE, this.settingsForm.value.bulkEditApplyOnClose)
 | 
			
		||||
    this.settings.set(SETTINGS_KEYS.BULK_EDIT_CONFIRMATION_DIALOGS, this.settingsForm.value.bulkEditConfirmationDialogs)
 | 
			
		||||
    this.settings.set(SETTINGS_KEYS.DOCUMENT_LIST_SIZE, this.settingsForm.value.documentListItemPerPage)
 | 
			
		||||
    this.documentListViewService.updatePageSize()
 | 
			
		||||
    this.toastService.showInfo($localize`Settings saved successfully.`)
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -5,8 +5,3 @@ export const OPEN_DOCUMENT_SERVICE = {
 | 
			
		||||
export const DOCUMENT_LIST_SERVICE = {
 | 
			
		||||
  CURRENT_VIEW_CONFIG: 'document-list-service:currentViewConfig'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const GENERAL_SETTINGS = {
 | 
			
		||||
  DOCUMENT_LIST_SIZE: 'general-settings:documentListSize',
 | 
			
		||||
  DOCUMENT_LIST_SIZE_DEFAULT: 50
 | 
			
		||||
}
 | 
			
		||||
@@ -3,8 +3,9 @@ import { Observable } from 'rxjs';
 | 
			
		||||
import { cloneFilterRules, FilterRule } from '../data/filter-rule';
 | 
			
		||||
import { PaperlessDocument } from '../data/paperless-document';
 | 
			
		||||
import { PaperlessSavedView } from '../data/paperless-saved-view';
 | 
			
		||||
import { DOCUMENT_LIST_SERVICE, GENERAL_SETTINGS } from '../data/storage-keys';
 | 
			
		||||
import { DOCUMENT_LIST_SERVICE } from '../data/storage-keys';
 | 
			
		||||
import { DocumentService } from './rest/document.service';
 | 
			
		||||
import { SettingsService, SETTINGS_KEYS } from './settings.service';
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -23,7 +24,7 @@ export class DocumentListViewService {
 | 
			
		||||
  isReloading: boolean = false
 | 
			
		||||
  documents: PaperlessDocument[] = []
 | 
			
		||||
  currentPage = 1
 | 
			
		||||
  currentPageSize: number = +localStorage.getItem(GENERAL_SETTINGS.DOCUMENT_LIST_SIZE) || GENERAL_SETTINGS.DOCUMENT_LIST_SIZE_DEFAULT
 | 
			
		||||
  currentPageSize: number = this.settings.get(SETTINGS_KEYS.DOCUMENT_LIST_SIZE)
 | 
			
		||||
  collectionSize: number
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
@@ -190,7 +191,7 @@ export class DocumentListViewService {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  updatePageSize() {
 | 
			
		||||
    let newPageSize = +localStorage.getItem(GENERAL_SETTINGS.DOCUMENT_LIST_SIZE) || GENERAL_SETTINGS.DOCUMENT_LIST_SIZE_DEFAULT
 | 
			
		||||
    let newPageSize = this.settings.get(SETTINGS_KEYS.DOCUMENT_LIST_SIZE)
 | 
			
		||||
    if (newPageSize != this.currentPageSize) {
 | 
			
		||||
      this.currentPageSize = newPageSize
 | 
			
		||||
    }
 | 
			
		||||
@@ -239,7 +240,7 @@ export class DocumentListViewService {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  constructor(private documentService: DocumentService) {
 | 
			
		||||
  constructor(private documentService: DocumentService, private settings: SettingsService) {
 | 
			
		||||
    let documentListViewConfigJson = sessionStorage.getItem(DOCUMENT_LIST_SERVICE.CURRENT_VIEW_CONFIG)
 | 
			
		||||
    if (documentListViewConfigJson) {
 | 
			
		||||
      try {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								src-ui/src/app/services/settings.service.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src-ui/src/app/services/settings.service.spec.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
import { TestBed } from '@angular/core/testing';
 | 
			
		||||
 | 
			
		||||
import { SettingsService } from './settings.service';
 | 
			
		||||
 | 
			
		||||
describe('SettingsService', () => {
 | 
			
		||||
  let service: SettingsService;
 | 
			
		||||
 | 
			
		||||
  beforeEach(() => {
 | 
			
		||||
    TestBed.configureTestingModule({});
 | 
			
		||||
    service = TestBed.inject(SettingsService);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should be created', () => {
 | 
			
		||||
    expect(service).toBeTruthy();
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										60
									
								
								src-ui/src/app/services/settings.service.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								src-ui/src/app/services/settings.service.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
import { Injectable } from '@angular/core';
 | 
			
		||||
 | 
			
		||||
export interface PaperlessSettings {
 | 
			
		||||
  key: string
 | 
			
		||||
  type: string
 | 
			
		||||
  default: any
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const SETTINGS_KEYS = {
 | 
			
		||||
  BULK_EDIT_CONFIRMATION_DIALOGS: 'general-settings:bulk-edit:confirmation-dialogs',
 | 
			
		||||
  BULK_EDIT_APPLY_ON_CLOSE: 'general-settings:bulk-edit:apply-on-close',
 | 
			
		||||
  DOCUMENT_LIST_SIZE: 'general-settings:documentListSize',
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const SETTINGS: PaperlessSettings[] = [
 | 
			
		||||
  {key: SETTINGS_KEYS.BULK_EDIT_CONFIRMATION_DIALOGS, type: "boolean", default: true},
 | 
			
		||||
  {key: SETTINGS_KEYS.BULK_EDIT_APPLY_ON_CLOSE, type: "boolean", default: false},
 | 
			
		||||
  {key: SETTINGS_KEYS.DOCUMENT_LIST_SIZE, type: "number", default: 50}
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
@Injectable({
 | 
			
		||||
  providedIn: 'root'
 | 
			
		||||
})
 | 
			
		||||
export class SettingsService {
 | 
			
		||||
 | 
			
		||||
  constructor() { }
 | 
			
		||||
 | 
			
		||||
  get(key: string): any {
 | 
			
		||||
    let setting = SETTINGS.find(s => s.key == key)
 | 
			
		||||
 | 
			
		||||
    if (!setting) {
 | 
			
		||||
      return null
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let value = localStorage.getItem(key)
 | 
			
		||||
 | 
			
		||||
    if (value != null) {
 | 
			
		||||
      switch (setting.type) {
 | 
			
		||||
        case "boolean":
 | 
			
		||||
          return JSON.parse(value)
 | 
			
		||||
        case "number":
 | 
			
		||||
          return +value
 | 
			
		||||
        case "string":
 | 
			
		||||
          return value
 | 
			
		||||
        default:
 | 
			
		||||
          return value
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      return setting.default
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  set(key: string, value: any) {
 | 
			
		||||
    localStorage.setItem(key, value.toString())
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  unset(key: string) {
 | 
			
		||||
    localStorage.removeItem(key)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user