mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-30 03:56:23 -05: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
	 jonaswinkler
					jonaswinkler