some refactoring.

This commit is contained in:
jonaswinkler 2020-12-14 11:22:24 +01:00
parent 98ab79ad5a
commit 02c1d496d6
3 changed files with 24 additions and 31 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)]="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>

View File

@ -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()
} }

View File

@ -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 : ''
} }