mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-11-03 03:16:10 -06:00 
			
		
		
		
	some refactoring.
This commit is contained in:
		@@ -3,7 +3,7 @@
 | 
				
			|||||||
    <div class="text-muted mt-1">Filter by:</div>
 | 
					    <div class="text-muted mt-1">Filter by:</div>
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
  <div class="col">
 | 
					  <div class="col">
 | 
				
			||||||
    <input class="form-control form-control-sm" type="text" [(ngModel)]="filterText" placeholder="Title">
 | 
					    <input class="form-control form-control-sm" type="text" [(ngModel)]="titleFilter" placeholder="Title">
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <app-filter-dropdown class="col-auto" [(items)]="filterEditorService.tags" [itemsSelected]="filterEditorService.selectedTags" [title]="'Tags'" (toggle)="onToggleTag($event)"></app-filter-dropdown>
 | 
					  <app-filter-dropdown class="col-auto" [(items)]="filterEditorService.tags" [itemsSelected]="filterEditorService.selectedTags" [title]="'Tags'" (toggle)="onToggleTag($event)"></app-filter-dropdown>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,29 +25,31 @@ export class FilterEditorComponent implements OnInit, OnDestroy {
 | 
				
			|||||||
  @Output()
 | 
					  @Output()
 | 
				
			||||||
  apply = new EventEmitter()
 | 
					  apply = new EventEmitter()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  get filterText() {
 | 
					  get titleFilter() {
 | 
				
			||||||
    return this.filterEditorService.filterText
 | 
					    return this.filterEditorService.titleFilter
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  set filterText(value) {
 | 
					  set titleFilter(value) {
 | 
				
			||||||
    this.filterTextDebounce.next(value)
 | 
					    this.titleFilterDebounce.next(value)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  filterTextDebounce: Subject<string>
 | 
					  titleFilterDebounce: Subject<string>
 | 
				
			||||||
  subscription: Subscription
 | 
					  subscription: Subscription
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ngOnInit() {
 | 
					  ngOnInit() {
 | 
				
			||||||
    this.filterTextDebounce = new Subject<string>()
 | 
					    this.titleFilterDebounce = new Subject<string>()
 | 
				
			||||||
    this.subscription = this.filterTextDebounce.pipe(
 | 
					    this.subscription = this.titleFilterDebounce.pipe(
 | 
				
			||||||
      debounceTime(400),
 | 
					      debounceTime(400),
 | 
				
			||||||
      distinctUntilChanged()
 | 
					      distinctUntilChanged()
 | 
				
			||||||
    ).subscribe(title => {
 | 
					    ).subscribe(title => {
 | 
				
			||||||
      this.filterEditorService.filterText = title
 | 
					      this.filterEditorService.titleFilter = title
 | 
				
			||||||
      this.applyFilters()
 | 
					      this.applyFilters()
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ngOnDestroy() {
 | 
					  ngOnDestroy() {
 | 
				
			||||||
 | 
					    this.titleFilterDebounce.complete()
 | 
				
			||||||
 | 
					    // TODO: not sure if both is necessary
 | 
				
			||||||
    this.subscription.unsubscribe()
 | 
					    this.subscription.unsubscribe()
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,9 +16,6 @@ import { NgbDate, NgbDateStruct } from '@ng-bootstrap/ng-bootstrap';
 | 
				
			|||||||
  providedIn: 'root'
 | 
					  providedIn: 'root'
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class FilterEditorViewService {
 | 
					export class FilterEditorViewService {
 | 
				
			||||||
  private tags$: Observable<Results<PaperlessTag>>
 | 
					 | 
				
			||||||
  private correspondents$: Observable<Results<PaperlessCorrespondent>>
 | 
					 | 
				
			||||||
  private documentTypes$: Observable<Results<PaperlessDocumentType>>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  tags: PaperlessTag[] = []
 | 
					  tags: PaperlessTag[] = []
 | 
				
			||||||
  correspondents: PaperlessCorrespondent[]
 | 
					  correspondents: PaperlessCorrespondent[]
 | 
				
			||||||
@@ -27,12 +24,9 @@ export class FilterEditorViewService {
 | 
				
			|||||||
  filterRules: FilterRule[] = []
 | 
					  filterRules: FilterRule[] = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  constructor(private tagService: TagService, private documentTypeService: DocumentTypeService, private correspondentService: CorrespondentService) {
 | 
					  constructor(private tagService: TagService, private documentTypeService: DocumentTypeService, private correspondentService: CorrespondentService) {
 | 
				
			||||||
    this.tags$ = this.tagService.listAll()
 | 
					    this.tagService.listAll().subscribe(result => this.tags = result.results)
 | 
				
			||||||
    this.tags$.subscribe(result => this.tags = result.results)
 | 
					    this.correspondentService.listAll().subscribe(result => this.correspondents = result.results)
 | 
				
			||||||
    this.correspondents$ = this.correspondentService.listAll()
 | 
					    this.documentTypeService.listAll().subscribe(result => this.documentTypes = result.results)
 | 
				
			||||||
    this.correspondents$.subscribe(result => this.correspondents = result.results)
 | 
					 | 
				
			||||||
    this.documentTypes$ = this.documentTypeService.listAll()
 | 
					 | 
				
			||||||
    this.documentTypes$.subscribe(result => this.documentTypes = result.results)
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  clear() {
 | 
					  clear() {
 | 
				
			||||||
@@ -43,22 +37,19 @@ export class FilterEditorViewService {
 | 
				
			|||||||
    return this.filterRules.length > 0
 | 
					    return this.filterRules.length > 0
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  set filterText(text: string) {
 | 
					  set titleFilter(title: string) {
 | 
				
			||||||
    let filterRules = this.filterRules
 | 
					    let existingRule = this.filterRules.find(rule => rule.type.id == FILTER_TITLE)
 | 
				
			||||||
    let existingRule = filterRules.find(rule => rule.type.id == FILTER_TITLE)
 | 
					
 | 
				
			||||||
    if (existingRule && (!text || text.length == 0)) {
 | 
					    if (!existingRule && title) {
 | 
				
			||||||
      filterRules.splice(filterRules.findIndex(rule => rule.type.id == FILTER_TITLE), 1)
 | 
					      this.filterRules.push({type: FILTER_RULE_TYPES.find(t => t.id == FILTER_TITLE), value: title})
 | 
				
			||||||
    } else if (existingRule && existingRule.value == text) {
 | 
					    } else if (existingRule && !title) {
 | 
				
			||||||
      return
 | 
					      this.filterRules.splice(this.filterRules.findIndex(rule => rule.type.id == FILTER_TITLE), 1)
 | 
				
			||||||
    } else if (existingRule) {
 | 
					    } else if (existingRule && title) {
 | 
				
			||||||
      existingRule.value = text
 | 
					      existingRule.value = title
 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
      filterRules.push({type: FILTER_RULE_TYPES.find(t => t.id == FILTER_TITLE), value: text})
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    this.filterRules = filterRules
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  get filterText(): string {
 | 
					  get titleFilter(): string {
 | 
				
			||||||
    let existingRule = this.filterRules.find(rule => rule.type.id == FILTER_TITLE)
 | 
					    let existingRule = this.filterRules.find(rule => rule.type.id == FILTER_TITLE)
 | 
				
			||||||
    return existingRule ? existingRule.value : ''
 | 
					    return existingRule ? existingRule.value : ''
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user