fix title filter not removing filter rule

This commit is contained in:
jonaswinkler 2020-12-14 11:12:36 +01:00
parent e1fef59e82
commit 98ab79ad5a
3 changed files with 29 additions and 18 deletions

View File

@ -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)]="filterEditorService.filterText" placeholder="Title" #filterTextInput> <input class="form-control form-control-sm" type="text" [(ngModel)]="filterText" 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>

View File

@ -1,14 +1,10 @@
import { Component, EventEmitter, Input, Output, ElementRef, AfterViewInit, QueryList, ViewChild, ViewChildren } from '@angular/core'; import { Component, EventEmitter, Input, Output, OnInit, OnDestroy } from '@angular/core';
import { AbstractPaperlessService } from 'src/app/services/rest/abstract-paperless-service';
import { ObjectWithId } from 'src/app/data/object-with-id';
import { FilterEditorViewService } from 'src/app/services/filter-editor-view.service' import { FilterEditorViewService } from 'src/app/services/filter-editor-view.service'
import { PaperlessTag } from 'src/app/data/paperless-tag'; import { PaperlessTag } from 'src/app/data/paperless-tag';
import { PaperlessCorrespondent } from 'src/app/data/paperless-correspondent'; import { PaperlessCorrespondent } from 'src/app/data/paperless-correspondent';
import { PaperlessDocumentType } from 'src/app/data/paperless-document-type'; import { PaperlessDocumentType } from 'src/app/data/paperless-document-type';
import { FilterDropdownComponent } from './filter-dropdown/filter-dropdown.component' import { Subject, Subscription } from 'rxjs';
import { FilterDropdownDateComponent } from './filter-dropdown-date/filter-dropdown-date.component' import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
import { fromEvent } from 'rxjs';
import { debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';
import { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap'; import { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap';
@Component({ @Component({
@ -16,7 +12,7 @@ import { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap';
templateUrl: './filter-editor.component.html', templateUrl: './filter-editor.component.html',
styleUrls: ['./filter-editor.component.scss'] styleUrls: ['./filter-editor.component.scss']
}) })
export class FilterEditorComponent implements AfterViewInit { export class FilterEditorComponent implements OnInit, OnDestroy {
constructor() { } constructor() { }
@ -29,19 +25,32 @@ export class FilterEditorComponent implements AfterViewInit {
@Output() @Output()
apply = new EventEmitter() apply = new EventEmitter()
@ViewChild('filterTextInput') filterTextInput: ElementRef; get filterText() {
return this.filterEditorService.filterText
}
ngAfterViewInit() { set filterText(value) {
fromEvent(this.filterTextInput.nativeElement,'keyup').pipe( this.filterTextDebounce.next(value)
debounceTime(150), }
distinctUntilChanged(),
tap() filterTextDebounce: Subject<string>
).subscribe((event: Event) => { subscription: Subscription
this.filterEditorService.filterText = (event.target as HTMLInputElement).value
ngOnInit() {
this.filterTextDebounce = new Subject<string>()
this.subscription = this.filterTextDebounce.pipe(
debounceTime(400),
distinctUntilChanged()
).subscribe(title => {
this.filterEditorService.filterText = title
this.applyFilters() this.applyFilters()
}) })
} }
ngOnDestroy() {
this.subscription.unsubscribe()
}
applyFilters() { applyFilters() {
this.apply.next() this.apply.next()
} }

View File

@ -46,7 +46,9 @@ export class FilterEditorViewService {
set filterText(text: string) { set filterText(text: string) {
let filterRules = this.filterRules let filterRules = this.filterRules
let existingRule = filterRules.find(rule => rule.type.id == FILTER_TITLE) let existingRule = filterRules.find(rule => rule.type.id == FILTER_TITLE)
if (existingRule && existingRule.value == text) { if (existingRule && (!text || text.length == 0)) {
filterRules.splice(filterRules.findIndex(rule => rule.type.id == FILTER_TITLE), 1)
} else if (existingRule && existingRule.value == text) {
return return
} else if (existingRule) { } else if (existingRule) {
existingRule.value = text existingRule.value = text